在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“
这样我们只需要将字符中的第一个字符替换为空就行了,这个处理起来就简单多了。不需要计算长度,省去了一步查询,查询效率上也会提高。
如果有什么更好的方法,欢迎在讨论区讨论。大家讨论技术,共同成长。
在sql语句中使用 xml for path 格式化字符串的方法总结的更多相关文章
- SQL语句中,除数为0时,相应方法
在sql中做除法处理的时候,可能需要处理除数为零的情况. (1).case语句处理方法是用case when ... else 来处理 (2).nullif函数nullif函数有两个参数,定义如下:N ...
- sql语句中#{}和${}的区别
#---将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的 ...
- MyBatis Sql语句中的转义字符
1.在xml的sql语句中,不能直接用大于号.小于号要用转义字符 如果用小于号会报错误如下: org.apache.ibatis.builder.BuilderException: Error cre ...
- 160311、mybatis sql语句中转义字符
问题: 在mapper ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法: 1.转义字符串 小于号 < < 大于号 > & ...
- mybatis sql语句中转义字符
问题: 在mapper ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法: 1.转义字符串 小于号 < < 大于号 > & ...
- MyBatis 动态 SQL 语句中出现 '<' 的问题
问题描述 映射接口方法如下: /** * 根据姓名和年龄查询用户信息 * @param name 姓名 * @param user 获取年龄 * @return */ public List<U ...
- MyBatis 中实现SQL语句中in的操作 (11)
MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...
- sql语句中----删除表数据drop、truncate和delete的用法
sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table tb --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...
- sql语句中获取datetime的日期部分或时间部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
随机推荐
- JavaScript代码段整理笔记系列(一)
30段JavaScript代码——上篇 1.如何区分IE及非IE浏览器: if(!+[1,]){ //IE 11 不支持 alert("这是 IE 浏览器"): }else{ al ...
- html小技巧
占位符 插入一个非间断空格.一般来说,无论你按多少次空格键,HTML也只会在单词之间显示一个空白间隔.当你需要插入多个空格时,请输入 或 代码.它们名为"空格占位符",你输入几个, ...
- 第三方Android 模拟器流畅速度快,适合开发人员
“工欲善其事,必先利其器.” 使用Android模拟器开发和调试应用肯定比使用真机方便.但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! ...
- grub2配置显示系统选择菜单(ubuntu 14.04)
背景: 有一次遇到过安装的新的内核后,ubuntu并没有显示选择内核的grub菜单,按shift键才会弹出,有时候shift按得不准就又进入了不是想进入的那个系统. 配置方法: sudo vim /e ...
- MVC+EF6+Oracle,提示ORA-01918: user '***' does not exist
1.在上下文里重载OnModelCreating: //没用到这个方法 protected override void OnModelCreating(DbModelBu ...
- c#与JavaScript实现对用户名、密码进行RSA非对称加密
博主最近手上这个项目呢(就是有上百个万恶的复杂excel需要解析的那个项目,参见博客:http://www.cnblogs.com/csqb-511612371/p/4885930.html),由于是 ...
- 八月22日,django知识点总结:
八月22日,知识点总结: python manage.py makemigrations python manage.py migrate unique=true是指这个字段的值在这张表里不能重复,所 ...
- React.js 官网入门教程 分离文件 操作无法正常显示HelloWord
对着React官网的教程练习操作,在做到分离文件练习时,按照官网步骤来却怎么也无法正常显示HelloWord. 经测试,html文件中内容改为: <!DOCTYPE html><ht ...
- 【codeforces 749E】 Inversions After Shuffle
http://codeforces.com/problemset/problem/749/E (题目链接) 题意 给出一个1~n的排列,从中等概率的选取一个连续段,设其长度为l.对连续段重新进行等概率 ...
- ORM之殇,我们需要什么样的ORM框架?
最近在研究ORM,究竟什么样的框架才是我们想要的 开发框架的意义在于 开发更标准,更统一,不会因为不同人写的代码不一样 开发效率更高,无需重新造轮子,重复无用的代码,同时简化开发流程 运行效率得到控制 ...