zoukankan      html  css  js  c++  java
  • 在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“

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

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

  • 相关阅读:
    KSTORE日常工作遇到问题总结
    调用bat文件执行java文件
    腾讯课堂十大Excel函数
    《将博客搬至CSDN》
    oracle 累加功能,累加百分比
    验证身份证是否合法
    远程登录修改密码
    二叉树的遍历
    nginx启动、重启、关闭
    状态模式-State-订单状态
  • 原文地址:https://www.cnblogs.com/kdkler/p/6165044.html
Copyright © 2011-2022 走看看