在較新版本的SQL中,出現有2個函數,STRING_SPLIT和STRING_AGG,前者是把帶有分隔的字符串轉換為表,而后者卻是把表某一表轉換為以某種字符分隔的字符串。
如下面:
DECLARE @str NVARCHAR(MAX) = N'ADS,ADFD,AGF,SDFGSFD,DSFG,RET,TRY,T,ADF,GSF,UY,QWERQ'
把它轉存為表:
DECLARE @dump_data AS TABLE([value] NVARCHAR(MAX)) INSERT INTO @dump_data ([value]) SELECT [value] FROM STRING_SPLIT(@str,',')
反轉,需要把臨時表這列[value] 轉換為一個字符串:
SELECT STRING_AGG([value], ',') FROM @dump_data
其實STRING_AGG這函數,還可以對新串聯的字符進行排序:
SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) FROM @dump_data
如果你不想創建臨時表,把拆分的數據插入臨時表,步驟繁復。可以使用派生表來進行:
SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) FROM (SELECT [value] FROM STRING_SPLIT(@str,',')) source
或者使用一般資料表運算式CTE (Common Table Expression)
;WITH dump_data AS ( SELECT [value] FROM STRING_SPLIT(@str,',') ) SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) FROM dump_data;





