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