MS SQL Server的STRING_SPLIT和STRING_AGG函數


在較新版本的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,',')
Source Code

 

反轉,需要把臨時表這列[value] 轉換為一個字符串:

 

SELECT STRING_AGG([value], ',') 
FROM @dump_data
Source Code

 

其實STRING_AGG這函數,還可以對新串聯的字符進行排序:

 

SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) 
FROM @dump_data
Source Code

 

如果你不想創建臨時表,把拆分的數據插入臨時表,步驟繁復。可以使用派生表來進行:

SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) 
FROM (SELECT [value] FROM STRING_SPLIT(@str,',')) source 
Source Code

 

或者使用一般資料表運算式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;
Source Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM