首頁 > 軟體

MySQL實現用逗號進行拼接、以逗號進行分割

2022-12-23 14:00:13

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
分割的結果
111
234
566

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:開發中會有很多種需要合併結果集的情況,比如要查詢小明這個同學所有科目分數返回一行,這樣使用來達到返回資料的要求。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com