萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 字串串聯函數全解析:CONCAT、CONCAT_WS 與 GROUP_CONCAT 差異與實戰

核心差異速查

函數語法NULL 處理分隔符典型用途
CONCATCONCAT(str1,str2,...)任一參數為 NULL → 結果 NULL無 (直接連接)簡單欄位合併
CONCAT_WSCONCAT_WS(sep,str1,str2,...)忽略 NULL 參數,僅分隔符為 NULL 才回傳 NULL第一參數指定欄位組合輸出 (如 CSV)
GROUP_CONCATGROUP_CONCAT([DISTINCT] col [ORDER BY ...] [SEPARATOR str])忽略 NULL 值預設逗號,可自訂群組聚合字串 (行轉列)

實戰範例

1. CONCAT - 任一 NULL 全 NULL

SELECT CONCAT('A', NULL, 'C');  -- 結果: NULL
SELECT CONCAT('A', 'B', 'C');   -- 結果: 'ABC'

避坑:數值隱含轉二進位字串,建議 CAST(num AS CHAR)。

2. CONCAT_WS - 彈性分隔、忽略 NULL

SELECT CONCAT_WS(',', 'A', NULL, 'C');  -- 結果: 'A,C'
SELECT CONCAT_WS('|', 'id', 'name', 'email');  -- 結果: 'id|name|email'

3. GROUP_CONCAT - 群組聚合神器

-- 基本用法
SELECT category, GROUP_CONCAT(product_name) FROM products GROUP BY category;

-- 進階:去重、排序、自訂分隔符
SELECT category,
       GROUP_CONCAT(DISTINCT product_name ORDER BY product_name DESC SEPARATOR '; ')
FROM products
GROUP BY category;

CONCAT 示例結果 CONCAT_WS 示例結果 GROUP_CONCAT 示例結果

效能與限制提醒

  • GROUP_CONCAT 結果長度受 group_concat_max_len (預設 1024) 限制,大量資料需調大。
  • 大量資料聚合易消耗記憶體,配合 LIMIT 或分頁處理。
  • 業務邏輯盡量在應用層處理字串拼接,降低資料庫 CPU 壓力。
copyright © 萬盛學電腦網 all rights reserved