MySQL实现用逗号进行拼接、以逗号进行分割
MySQL用逗号进行拼接、以逗号进行分割
MySQL中,把查询的结果拼接成一个字符串。
group_concat 函数
用法:group_concat (待拼接对象)
输出:用逗号进行拼接后的字符串
例子:
?1 2 3 4 5 6 7 8 9 | select group_concat(emp_no) as employees from dept_emp; /* 结果: employees | + -------------------------------------------------------------------+ | 10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10010 | + -------------------------------------------------------------------+ */ |
可以使用MySQL中的字符串拆分函数实现:
?1 | substring_index(str,delim, count ) |
说明:str: 被分割的字符串; delim: 分隔符; count: 分割符出现的次数
例子:
对于字符串 “209755,209756,209757” ,设置delim为 “,”,count为1,就会返回 “209755”;
其它参数不变,count为2,就会返回 “209755,209756”;其它参数不变,count为-1,就会返回 “209757”。
?1 2 3 4 5 | select colnum_name ,( select substring_index(substring_index(bill_ids, ',' ,1), ',' ,-1)) as bill_id1 ,( select substring_index(substring_index(bill_ids, ',' ,2), ',' ,-1)) as bill_id2 ,( select substring_index(substring_index(bill_ids, ',' ,3), ',' ,-1)) as bill_id3 from table_name; |
若不知道要分割的字段究竟有几个值(如可能某些行就1个值,某些有6个),可以考虑根据具有最多值的数量来选择使用多少条
(select substring_index(substring_index(bill_ids,’,’,第几个值),’,’,-1))语句,但是会有问题(待解决)
例子:
1 |
2,3,4 |
5,6 |
1 | 1 | 1 |
2 | 3 | 4 |
5 | 6 | 6 |
MySQL多行数据用逗号拼接返回一行
解决方案
先说解决办法,这里使用的是 GROUP_CONCAT 函数,先来实例:
?1 | SELECT GROUP_CONCAT( ` name ` SEPARATOR ',' ) FROM uim_user |
这样返回的多行数据会合并成一行,并且用逗号分割返回.
GROUP_CONCAT简单阐述
使用语法:
?1 | group_concat([ DISTINCT ] 要连接的字段 [ Order BY ASC / DESC 排序字段] [Separator '分隔符' ]) |
一般与group by 分组一起使用,如果不分组默认返回一行
而分组后会把相同分组类型的数据返回一行,并且可使用分割符号分割,去重,排序等操作
简单实例:
这里是按照部门分组,这样同一个部门的人会返回一行并且用逗号分割
?1 | SELECT group_concat( distinct ( name ) SEPARATOR ',' ) name FROM uim_user group by dept_id |
ps:开发中会有很多种需要合并结果集的情况,比如要查询小明这个同学所有科目分数返回一行,这样使用来达到返回数据的要求。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_39562364/article/details/106658850
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。