zoukankan      html  css  js  c++  java
  • SQL Server 2017 新字符串函数

    读书笔记,整理自<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, datetime...)输出都是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())

  • 相关阅读:
    12月12日总结
    练习:请用索引取出下面list的指定元素:
    练习:小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:
    练习:请利用循环依次对list中的每个名字打印出Hello, xxx!:
    练习:学员管理系统
    练习:请修改列表生成式,通过添加if语句保证列表生成式能正确地执行
    CF1067D Computer Game
    高等数学第三章
    CF755G PolandBall and Many Other Balls
    TS泛型工具
  • 原文地址:https://www.cnblogs.com/sqlzh/p/9629208.html
Copyright © 2011-2022 走看看