SQL как взять список через запятую (формат sting) и отсортировать его - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть таблица, как показано ниже.Столбец "newDataIDs" представляет собой список с разделителями-запятыми, но сам столбец имеет формат varchar.Как отсортировать значения в столбце в порядке возрастания и вернуть его обратно в столбец в формате varchar?

(т. Е. Для 2-й строки таблицы ожидаемое значение для newDataID: «WVR0000015, WVR0000019, WVR0000020»))

enter image description here

Редактировать: Благодаря @ METAL, я получил ответ.Я включил его ответ в свое дело следующим образом:

 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

1 Ответ

2 голосов
/ 24 сентября 2019

Вот ваш сценарий.

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, '')
...