Чтобы объединить значения, разделенные запятыми, в MS SQL (Microsoft SQL Server) можно использовать различные методы. Вот несколько подходов:
-
STRING_SPLIT и FOR XML PATH:
SELECT STUFF((SELECT ', ' + value FROM STRING_SPLIT('value1,value2,value3', ',') FOR XML PATH('')), 1, 2, '') AS Result; -
XML и перекрестное применение:
SELECT STUFF((SELECT ', ' + x.value('.','nvarchar(max)') FROM (SELECT CAST('<X>'+REPLACE('value1,value2,value3', ',', '</X><X>')+'</X>' AS XML) AS x) AS records CROSS APPLY x.nodes('X') AS T(x) FOR XML PATH('')), 1, 2, '') AS Result; -
Рекурсивное CTE (общее табличное выражение):
WITH CTE AS ( SELECT 'value1,value2,value3' AS csv ), RecursiveCTE AS ( SELECT LEFT(csv, CHARINDEX(',', csv + ',') - 1) AS value, STUFF(csv, 1, CHARINDEX(',', csv + ','), '') AS remaining_csv FROM CTE UNION ALL SELECT LEFT(remaining_csv, CHARINDEX(',', remaining_csv + ',') - 1), STUFF(remaining_csv, 1, CHARINDEX(',', remaining_csv + ','), '') FROM RecursiveCTE WHERE remaining_csv <> '' ) SELECT STUFF((SELECT ', ' + value FROM RecursiveCTE FOR XML PATH('')), 1, 2, '') AS Result;
Это всего лишь несколько примеров того, как можно объединить значения, разделенные запятыми, в MS SQL. В зависимости от ваших конкретных требований и версии базы данных могут быть доступны и другие методы.