SQL Server 2017 新的字符串聚合函数String_Agg

还记得第一次要做一个多行的字符串拼接是多么的痛苦.

cross apply  / stuff + XML path ; CONCAT  还有COALESCE 加上"+"拼接字符串的过程, 相信大家也是记忆犹新.

这次SQL Server 2017 中,引入了String_Agg函数, 经过测试可真是一招破敌啊.

下面来看一下效果吧.  官网参考

 

SQL Server 2017 新的字符串聚合函数String_Agg_第1张图片

语法介绍上,可以看出由两部分组成.

上面的部分使用了表达式跟分隔符. 这个很好理解.

下面的部分引用了WITHIN GROUP ,注意这个是可以选用的. 它的功能是提供一种排序方式,这样就可以此完成排序跟拼接了.

 

drop table if exists NewFunction_Data 
create table NewFunction_Data ( 
id int identity(1,1) primary key, 
sql_version varchar(100), 
description nvarchar(100) 
) 
insert into NewFunction_Data select 'SQL Server 2000','LongLongAgo' 
insert into NewFunction_Data select 'SQL Server 2000','missYouSoMuch' 
insert into NewFunction_Data select 'SQL Server 2017','New Function STRING_AGG' 
insert into NewFunction_Data select 'SQL Server 2017','LOVE Linux' 
insert into NewFunction_Data select 'SQL Server 2016','In_Memory OLTP' 
insert into NewFunction_Data select 'SQL Server 3000','hehe' 
go


 

SQL Server 2017 新的字符串聚合函数String_Agg_第2张图片

 

一行解决问题哦. 而且如果要分组再合并的话也不是事儿.

 

SQL Server 2017 新的字符串聚合函数String_Agg_第3张图片

 

然后使用一下WITHIN GROUP;注意红色的顺序按照 decription 字段的ASC排序了.

SQL Server 2017 新的字符串聚合函数String_Agg_第4张图片

 

 

最后特别要指出的是下面的例子, 通常数据里面都会有NULL值, 如果字符串字段中含有NULL, 那么 合并字符串的"+"

操作是否会直接得出NULL呢??? 我们需要先将数据中的NULL排除吗?    答案是 NOooooooooooooooooo

 

insert into NewFunction_Data select 'SQL Server 2000',NULL
insert into NewFunction_Data select 'SQL Server 2017',NULL


还是上面的例子, 添加这两行数据, 执行一下程序,就会看到没有任何结果数据变成了NULL.  所以, 实际使用中不用考虑数据NULL事先需要过滤的问题.

 

能合并难道不能有简便方法拆开?  注意看下官网的String_Split() 函数哟

你可能感兴趣的:(MSSQL,T-SQL,Programming,SQL,SERVER,2017,String_Agg,字符串合并拆分)