• 在sql语句中使用 xml for path 格式化字符串的方法总结


    此方法实现的是将查询表中的某个字段,格式化成  字符串1,字符串2,字符串3...的格式

    假设我们现在有两个表 分别是 分组表 grouped和分组成员表 groupuser 

    grouped表有连个字段 id ,groupname

    groupuser表有id,groupid,userid,username 四个字段

    两个表存储的是每一个分组下,对应的成员都有谁

    分组表
    id groupname
    group1 科研小组
    group2 审计小组

     

    分组成员表
    id groupid  userid  username
    1 group1 userid1 用户1
    2 group1 userid3 用户3

    查询的结果是查出来科研小组中成员的名字,名字用逗号分隔。

    查询的方法1

    select UserName+',' FROM dbo.groupuser WHERE groupID='group1' FOR XML PATH('')

    查询结果是:“用户1,用户3,“

    可是我们的要求是最后的一个逗号要去掉,这个时候其实就是处理字符串了,方法有很多,比如使用substring()函数,将最后一个逗号去掉,要使用此方法,我们就得指标这个字符串的长度,使用sql中的len()函数即可,但是这样多查询了一步,有没有什么更简单的方法呢?

    经过测试,笔者发现了一种方法:

    select stuff((SELECT ','+UserName FROM groupuser WHERE [groupID]='group1' FOR XML PATH('')),1,1,'') 

    这样,我们起初在格式化查询结果的时候,将逗号放到名字的左边,结果是 “,用户1,用户3“

    这样我们只需要将字符中的第一个字符替换为空就行了,这个处理起来就简单多了。不需要计算长度,省去了一步查询,查询效率上也会提高。

    如果有什么更好的方法,欢迎在讨论区讨论。大家讨论技术,共同成长。

  • 相关阅读:
    Windows 配置 allure report 环境
    ruby 异常处理 begin rescue end
    ruby 安装 mysql2 命令
    Linux 新建文件/文件夹,删除文件文件夹,查找文件 打开文件
    Ubuntu 共享 转载
    单元测试框架 unittest 的运行方法if __name__ == '__main__': unittest.main()
    Python 字典和json的本质区别(个人理解)

    接口自动化大致流程。
    iOS开发UI篇—CAlayer(自定义layer)
  • 原文地址:https://www.cnblogs.com/kdkler/p/6165044.html
Copyright © 2020-2023  润新知