在较新版本的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;
原文链接:http://www.cnblogs.com/insus/p/10924583.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728