Reputation: 127
I have a table as shown below. The column "newDataIDs" is a comma delimited list but the column itself is in varchar format. How can I sort the values in column in ascending order and put it back to the column in varchar format?
(i.e for 2nd row of the table the expected value for newDataIDs is: "WVR0000015, WVR0000019, WVR0000020")
Edit: Thanks to @METAL,I have gotten the anwer. I have incorporated his answer into my case as follow:
update [db].[dbo].[mytable] set [NewDataIDs] = t.ids
from (
SELECT STUFF((
SELECT ',' +ltrim(Split.a.value('.', 'NVARCHAR(MAX)')) sorted
FROM
(
SELECT CAST('<t>'+REPLACE([NewDataIDs], ',', '</t><t>')+'</t>' AS XML) AS String
) AS A
CROSS APPLY String.nodes('/t') AS Split(a)
ORDER BY sorted asc
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') as ids
from [db].[dbo].[mytable]
) t
Upvotes: 0
Views: 689
Reputation: 13006
Here's your script.
declare @str varchar(max)
set @str = 'WVR0000015, WVR0000019, WVR0000020'
SELECT STUFF((
SELECT ',' +ltrim(Split.a.value('.', 'NVARCHAR(MAX)')) sorted
FROM
(
SELECT CAST('<t>'+REPLACE(@str, ',', '</t><t>')+'</t>' AS XML) AS String
) AS A
CROSS APPLY String.nodes('/t') AS Split(a)
ORDER BY sorted asc
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
Upvotes: 2