zoukankan      html  css  js  c++  java
  • MS SQL Server的STRING_SPLIT和STRING_AGG函数

    在较新版本的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,',')
    Source Code

    反转,需要把临时表这列[value] 转换为一个字符串:

    SELECT STRING_AGG([value], ',') 
    FROM @dump_data
    Source Code

    其实STRING_AGG这函数,还可以对新串联的字符进行排序:

    SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) 
    FROM @dump_data
    Source Code

    如果你不想创建临时表,把拆分的数据插入临时表,步骤繁复。可以使用派生表来进行:

    SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY [value]) 
    FROM (SELECT [value] FROM STRING_SPLIT(@str,',')) source 
    Source Code

    或者使用一般资料表运算式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;
    Source Code
  • 相关阅读:
    HDU3555:Bomb
    入门OJ:售货员的难题
    Zju1100 Mondriaan
    与图论的邂逅08:树上倍增
    入门OJ:八中生成树2
    Poj2286 The Rotation Game
    P1379 八数码难题
    [SCOI2005]骑士精神
    与图论的邂逅07:K短路
    [Usaco2007 Feb]Cow Party
  • 原文地址:https://www.cnblogs.com/insus/p/10924583.html
Copyright © 2011-2022 走看看