Is it possible to convert text from a table column in SQL Server to PascalCase only using a proper SQL code?
TABLE DEFINITION
----------------------
ID int
CITTA varchar(50)
PROV varchar(50)
CAP varchar(50)
COD varchar(50)
The field that contains text to convert is CITTA
. It contains all uppercase values like "ABANO TERME", "ROMA", and so on. The words are delimited by a space.
EDIT
I forgot to mention that some words have an accent character in it '
. This character can be found either at the end of the word or in the middle.
EDIT 2:
Some quirks found on results:
could you please give me some advice on this small problem?
DECLARE @T TABLE
(
ID INT PRIMARY KEY,
CITTA VARCHAR(50)
)
INSERT INTO @T
SELECT 1, 'ABANO TERME' UNION ALL SELECT 2, 'ROMA' UNION ALL SELECT 3, 'ISOLA D''ASTI';
IF OBJECT_ID('tempdb..#HolderTable') IS NOT NULL
DROP TABLE #HolderTable
CREATE TABLE #HolderTable
(
Idx INT IDENTITY(1,1) PRIMARY KEY,
ID INT,
Word VARCHAR(50)
)
CREATE NONCLUSTERED INDEX ix ON #HolderTable(ID)
;
WITH T1 AS
(
SELECT ID, CAST(N'<root><r>' + REPLACE(REPLACE(CITTA, '''', '''</r><r>'), ' ', ' </r><r>') + '</r></root>' AS XML) AS xl
FROM @T
)
INSERT INTO #HolderTable
SELECT ID,
r.value('.','NVARCHAR(MAX)') AS Item
FROM T1
CROSS APPLY
xl.nodes('//root/r') AS RECORDS(r)
SELECT
ID,
(SELECT STUFF(LOWER(Word),1,1,UPPER(LEFT(Word,1))) FROM #HolderTable WHERE [@T].ID = #HolderTable.ID ORDER BY Idx FOR XML PATH('') )
FROM @T [@T]