• SQL Server字符串聚合拼接办法


    网上搜了一圈还是有不错的方法的,比如STUFF函数,我们可以这么写得到上面的结果:

    SELECT [TYPE], STUFF(
    ( SELECT ','+ [Name] 
    FROM test b 
    WHERE b.Type = a.Type 
    FOR XML PATH('')),1 ,1, '') [Names]
    from Test a
    group by [TYPE]

    最近在项目中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进行拼接显然不是最好的方法,所以想着能否在数据读取的时候直接拼接好返回,网上搜了可通过for xml来实现。

      首先,准备好需要的数据,脚本如下:  
    复制代码

    if exists (select * from sysObjects where id=object_id('Student'))
    drop table Student
    go

    create table Student
    (
    Id int,
    Name varchar(20)
    )

    go
    insert into Student values(1,‘张三’);
    insert into Student values(2,‘李四’);
    insert into Student values(3,‘王五’);
    复制代码

     当前表中数据如下:

     需要将Name以“张三;李四;王五”格式显示。

     具体通过实现如下:  

    select stuff((
    select ';'+name
    from Student for xml path('')),1,1,'') as name

     乍一看,是不是有点迷糊,不急,下面我们一一道来。

     上面语句我们分为两部分来看,首先要明白for xml path的用法,在SQL SERVER中我们有很多方法读取XML字段中的片段,反过来SQL SERVER也允许我们将表数据以XML方式显示,for xml path便是以xml显示的一种方式。  

      select ';'+name
    from Student for xml path('')

     这段代码就是告诉数据库服务器要将生成的XML中name值以“;”方式进行拼接。

       更多可参考:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html

        其次,我们理解stuff函数的用法,通过上述代码拼接生成的内容为“;张三;李四;王五”,显然最前的“;”是多余的,所以我们通过stuff来去除。

     STUFF(string,insert position,delete count,string inserted)函数是将一个字符串插入到另一个字符串中。插入时,插入的字符串可能删除指定数量的字符。

     第一个参数string,指的就是你要操作的内容,可以是一个固定字符串,也可以指定为某列;

     第二个参数insert position,指插入开始位置,SQLSERVER中默认是从1开始,而非从0开始;

     第三个参数delete count,指的是要删除的字符个数,从position删除指定的个数,如果count为0表示不删除;

     第四个参数string inserted,表示要插入的字符串;

        eg:select  stuff('abcdefg',3,2,'123')

     结果:ab123efg

  • 相关阅读:
    配置好fastfds和nginx,eclipse用代码上传图片失败
    安装redis集群出错
    解决eclipse打不开
    centos常用命令
    搜索引擎高效搜索
    POJ1067 取石子游戏 威佐夫博弈 博弈论
    伤逝——shoebill关于noip2017的手记
    JZYZOJ1530 [haoi2013]开关控制 状压 dfs 折半搜索
    JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路
    JZYZOJ1454 NOIP2015 D2T3_运输计划 二分 差分数组 lca tarjan 树链剖分
  • 原文地址:https://www.cnblogs.com/purple5252/p/12326658.html
Copyright © 2020-2023  润新知