MySQL实现用逗号进行拼接、以逗号进行分割
作者:何玉先先
这篇文章主要介绍了MySQL实现用逗号进行拼接、以逗号进行分割问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
MySQL用逗号进行拼接、以逗号进行分割
MySQL中,把查询的结果拼接成一个字符串。
group_concat 函数
用法:group_concat (待拼接对象)
输出:用逗号进行拼接后的字符串
例子:
select group_concat(emp_no) as employees from dept_emp; /* 结果: employees | +-------------------------------------------------------------------+ | 10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10010 | +-------------------------------------------------------------------+ */
可以使用MySQL中的字符串拆分函数实现:
substring_index(str,delim,count)
说明:str: 被分割的字符串; delim: 分隔符; count: 分割符出现的次数
例子:
对于字符串 “209755,209756,209757” ,设置delim为 “,”,count为1,就会返回 “209755”;
其它参数不变,count为2,就会返回 “209755,209756”;其它参数不变,count为-1,就会返回 “209757”。
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 函数,先来实例:
SELECT GROUP_CONCAT( `name` SEPARATOR ',' ) FROM uim_user
这样返回的多行数据会合并成一行,并且用逗号分割返回.
GROUP_CONCAT简单阐述
使用语法:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
一般与group by 分组一起使用,如果不分组默认返回一行
而分组后会把相同分组类型的数据返回一行,并且可使用分割符号分割,去重,排序等操作
简单实例:
这里是按照部门分组,这样同一个部门的人会返回一行并且用逗号分割
SELECT group_concat( distinct(name) SEPARATOR ',' ) name FROM uim_user group by dept_id
ps:开发中会有很多种需要合并结果集的情况,比如要查询小明这个同学所有科目分数返回一行,这样使用来达到返回数据的要求。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。