欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MS SQL Server的STRING_SPLIT和STRING_AGG函数

程序员文章站 2022-04-12 15:34:15
在较新版本的SQL中,出现有2个函数,STRING_SPLIT和STRING_AGG,前者是把带有分隔的字符串转换为表,而后者却是把表某一表转换为以某种字符分隔的字符串。 如下面: 把它转存为表: DECLARE @dump_data AS TABLE([value] NVARCHAR(MAX)) ......

在较新版本的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;