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:開發中會有很多種需要合並結果集的情況,比如要查詢小明這個同學所有科目分數返回一行,這樣使用來達到返回數據的要求。
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mysql單字段多值分割和合並的處理方法
- MySQL 十大常用字符串函數詳解
- MySQL必備基礎之分組函數 聚合函數 分組查詢詳解
- MySql字符串拆分實現split功能(字段分割轉列)
- MySQL之select、distinct、limit的使用