首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 字符串拼接函數 CONCAT 與 CONCAT_WS 詳細解析

     編輯:MySQL 綜合教學

MySQL 字符串拼接:CONCAT vs CONCAT_WS

MySQL 提供兩個常用的字符串拼接函數:CONCAT() 與 CONCAT_WS()。它們在處理 NULL 值、分隔符使用上有顯著差異,選擇合適的函數能簡化查詢邏輯。

1. CONCAT(str1, str2, ...)

直接拼接所有參數,任一參數為 NULL 則結果為 NULL。

SELECT CONCAT('1','2','3');      -- 返回 '123'
SELECT CONCAT('1','2',NULL,'3'); -- 返回 NULL

2. CONCAT_WS(separator, str1, str2, ...)

With Separator,第一個參數為分隔符,分隔符為 NULL 時結果為 NULL;後續參數中的 NULL 會被自動忽略,不會導致整體為 NULL。

SELECT CONCAT_WS(':','1','2','3');           -- 返回 '1:2:3'
SELECT CONCAT_WS(NULL,'1','2','3');          -- 返回 NULL(分隔符為NULL)
SELECT CONCAT_WS(':','1','2',NULL,NULL,'3'); -- 返回 '1:2:3'(忽略NULL)

3. 實戰技巧:配合 IFNULL/COALESCE 處理 NULL

若需將 NULL 替換為預設值再拼接,可嵌套 IFNULL() 或 COALESCE()。

SELECT CONCAT_WS(':','1','2',IFNULL(NULL,'0'),'3'); -- 返回 '1:2:0:3'

4. 適用場景對比

場景推薦函數理由
簡單拼接,確定無 NULLCONCAT語法簡潔,性能略優
字段可能含 NULL,需忽略CONCAT_WS自動跳過 NULL,無需額外判斷
需要自定義分隔符(如 CSV、標籤拼接)CONCAT_WS內建分隔符參數,避免手動拼接分隔符
分隔符本身可能為 NULLCONCATCONCAT_WS 分隔符為 NULL 直接返回 NULL

5. 總結

  • CONCAT:全非 NULL 才返回結果,適合嚴格拼接。
  • CONCAT_WS:分隔符非 NULL 時,自動過濾後續 NULL,適合彈性拼接、生成分隔字符串。
  • 根據業務對 NULL 的容忍度選擇,必要時配合 IFNULL/COALESCE 預處理字段。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved