SQLServer2017新字符串函数读书笔记,整理⾃<SQL Server 2017 Developer's Guide>
字符串处理函数
STRING_SPLIT,
是⼀个table valued function
执⾏计划⾥Estimated Number of Rows is 50
compatibility level 130 以上
使⽤限制
分隔符是单个字符
返回1列
返回的数据类型是string,即使是⼀串数字
select * from STRING_SPLIT('1,2,3,4',',')
select  string_agg(OrderID,',') from MoxyOrders
STRING_AGG
2017引⼊,把输⼊值连起来,并在中间添加分隔符
输⼊varchar, 输出是varchar(8000)
输⼊nvarchar(max),输出nvarchar(max)
其他任何类型输⼊(nvarchar, int, float, )输出都是nvarchar(4000)
SELECT STRING_AGG (name, ',') AS dbs_as_csv FROM sys.databases;
--输⼊也可以不是字符串类型的
SELECT STRING_AGG (database_id, ',') AS dbiss_as_csv FROM sys.databases;
--直接在master上⾯执⾏,会出现字符串长度的问题
SELECT STRING_AGG (name, ',') AS cols FROM sys.syscolumns;
-
字符串函数连接-输⼊⽤NVARCHAR(MAX)就好了
SELECT STRING_AGG (CAST(name AS NVARCHAR(MAX)), ',') AS cols FROM sys.syscolumns;
STRING_AGG 中NULL值的处理
NULL值会被直接忽略掉
下⾯这两句的output是⼀样的
SELECT STRING_AGG(c,',') AS fav_city FROM (VALUES('Vienna'),('Lisbon')) AS T(c)
UNION ALL
SELECT STRING_AGG(c,',') AS fav_city FROM (VALUES('Vienna'),(NULL),('Lisbon')) AS T(c);
Within Group的⽤法
作⽤就是在使⽤STRING_AGG 拼字符串的时候给值排序,如下例
use [WideWorldImporters]
DECLARE @input VARCHAR(20) = '1059,1060,1061';
SELECT CustomerID, STRING_AGG(OrderID, ',') WITHIN GROUP(ORDER BY OrderID DESC) AS orderids
FROM Sales.Orders o
INNER JOIN STRING_SPLIT(@input,',') x ON x.value = o.CustomerID
GROUP BY CustomerID
ORDER BY CustomerID;
CONCAT_WS
拼字符串,第⼀个参数是分隔符,之后可以传最多8000个参数⽤于连接字符串,会⾃动忽略null值SELECT CONCAT_WS( ' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
TRIM
删除左右两边的空格,相当于原来的LTRIM(RTRIM())

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。