首頁 > 軟體

MySQL實現欄位或字串拼接的三種方式總結

2023-09-06 14:05:19

一、CONCAT函數

concat函數是將多個欄位或字串拼接為一個字串;但是字串之間沒有任何分隔。

concat函數官方介紹

-- CONCAT函數的語法如下:
CONCAT(str1,str2,...)

1.1、拼接非空欄位或字串

SELECT CONCAT(欄位1,欄位2,欄位3,...) from 表名;
 
-- 拼接表欄位範例
SELECT CONCAT(id,genre,release_year) result from movies;

執行結果如下:

SELECT CONCAT(字串1,字串2,字串3,...) ;
 
-- 拼接字串範例
SELECT CONCAT('張三','李四','王五') result;

執行結果如下:

1.2、拼接空(NULL)欄位

如果拼接的欄位中有一個為null,則結果為null。

SELECT CONCAT(字串1,字串2,字串3,...) ;
 
-- 拼接含有NULL字串範例
SELECT CONCAT('張三',NULL,'王五') result;

執行結果如下:

二、CONCAT_WS函數

concat_ws函數將多個欄位或字串拼接為一個字串,且字串直接可以指定分隔符;

concat_ws函數的官方介紹

-- CONCAT_WS函數的語法如下:
CONCAT_WS(separator,str1,str2,...)

2.1、拼接非空欄位或字串

-- 拼接非空欄位範例:
SELECT CONCAT_WS(' ',id,genre,release_year) result from movies;
 
-- 拼接字串範例:
SELECT CONCAT_WS(' ','張三','李四','王五') result ;

執行結果如下:

2.2、拼接空(NULL)欄位

-- 拼接空(NULL)字串範例:
SELECT CONCAT_WS(' ','張三',NULL,'王五') result ;

執行結果如下:

三、GROUP_CONCAT函數

group_concat函數可以將多行欄位資料合併為一行;且內容之間可以指定分隔符;

group_concat函數的官方介紹

group_concat函數的官方介紹翻譯

-- group_concat函數的語法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val]
             [LIMIT {[offset,] row_count | row_count OFFSET offset}])

3.1、預設以逗號分隔符連線

-- 預設的逗號分隔
SELECT GROUP_CONCAT(欄位名) from 表名;
 
-- 預設逗號分隔範例:
SELECT GROUP_CONCAT(genre) from movies;

執行結果如下:

3.2、可自定義對欄位去重排序和指定分隔符

3.2.1、自定義分隔符

-- 自定義字串分隔符
SELECT GROUP_CONCAT(欄位名 SEPARATOR '分隔符號') from 表名;
 
-- 範例:
SELECT GROUP_CONCAT(genre SEPARATOR ';') from movies;

3.2.2、將整數轉為字串

--將整數位段轉為字元
SELECT GROUP_CONCAT(CAST(欄位名 as CHAR) SEPARATOR '分隔符號') from 表名;
 
-- 範例
SELECT GROUP_CONCAT(CAST(id as CHAR) SEPARATOR ';') from movies;

執行結果如下:

3.2.3、多欄位拼接

-- 多欄位拼接
SELECT GROUP_CONCAT(欄位1,欄位2,欄位3 SEPARATOR '分隔符號') from 表名;
 
-- 範例
SELECT GROUP_CONCAT(release_year,genre,imdb SEPARATOR ';') from movies;

執行結果如下:

3.2.4、欄位去重排序和自定義分隔

-- 欄位去重排序和自定義分隔
SELECT GROUP_CONCAT(DISTINCT 欄位名 ORDER BY 欄位名 asc或desc SEPARATOR '分隔符號') from movies;
 
-- 範例
SELECT GROUP_CONCAT(DISTINCT genre ORDER BY genre DESC SEPARATOR ';') from movies;

執行後結果如下:

3.3、group_concat的限制和設定

3.3.1、檢視當前group_concat函數的長度

預設是1024位元組即1k;

-- 檢視當前group_concat函數的長度
show variables like 'group_concat_max_len';

執行結果如下:

3.3.2、設定當前Session的group_concat函數的長度,不影響其他的Session

-- 設定當前Session的group_concat的長度為1M
SET SESSION group_concat_max_len = 1048576;

執行結果如下:

3.3.3、設定全域性 group_concat函數的長度,需斷開後重新連線才生效

-- 設定全域性 group_concat函數的長度,需斷開後重新連線才生效
SET GLOBAL group_concat_max_len = 1048576;

執行結果如下:

到此這篇關於MySQL實現欄位或字串拼接的三種方式總結的文章就介紹到這了,更多相關MySQL欄位 字串拼接內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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