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。

推薦閱讀: