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

MySQL 字串連接完全指南:CONCAT 與 CONCAT_WS 實戰詳解

     編輯:MySQL 綜合教學

前言:為什麼 MySQL 字串連接「別具一格」?

在 Java、C# 等主流程式語言中,字串拼接習慣使用 + 號(如 "1" + "3"、"a" + "b")。然而在 MySQL 中,直接使用 + 連接字串往往會得到「驚人」的結果。本文將深入剖析 MySQL 字串連接的獨特行為,並詳細講解標準函數 CONCAT 與 CONCAT_WS 的正確用法,助你避開常見坑點。

「+」號陷阱:隱式數值轉換

執行以下 SQL:

SELECT '12' + '33', FAge + '1' FROM T_Employee;

第一列結果並非預期的 '1233',而是 45。原因在於:MySQL 遇到 + 運算子時,會嘗試將兩側運算元**轉換為數值型別**;轉換失敗則視為 0。因此 '12' 變為 12,'33' 變為 33,最終執行數學加法 12 + 33 = 45。同理,若欄位 FAge 為數值型別,FAge + '1' 會將 '1' 轉為 1 進行加法運算。

非數字字串的處理

SELECT 'abc' + '123', FAge + 'a' FROM T_Employee;

'abc' 無法轉為數值,視為 0;'123' 轉為 123,結果為 123。'a' 同樣視為 0,故 FAge + 'a' 等同於 FAge + 0。

核心結論:MySQL 中 + 僅為**算術加法運算子**,不具備字串拼接功能。

正統拼接函數:CONCAT

基本語法與特性

CONCAT(str1, str2, ...)
  • 支援一個或多個參數
  • 參數可為字串或非字串型別(非字串會自動轉為字串)
  • 按參數順序拼接,任一參數為 NULL 則整體回傳 NULL

實戰範例:組合顯示欄位

SELECT CONCAT('工號為:', FNumber, '的員工幸福指數:', FSalary / (FAge - 21))
FROM T_Employee;

輸出範例:工號為:E001的員工幸福指數:2.5

單參數用法:型別轉換器

CONCAT(123) 回傳 '123',可作為「將任意值轉為字串」的快捷方式。

進階拼接:CONCAT_WS(帶分隔符)

語法

CONCAT_WS(separator, str1, str2, ...)
  • 第一個參數為分隔符
  • 後續參數為待拼接字串
  • 自動跳過 NULL 值(不會產生連續分隔符)

範例:CSV 風格匯出

SELECT CONCAT_WS(',', FNumber, FAge, FDepartment, FSalary)
FROM T_Employee;

輸出:E001,28,RD,25000

跨資料庫對比:SQL Server 的「+」行為

在 Microsoft SQL Server 中,+ 可直接用於字串拼接:

SELECT '工號為' + FNumber + '的員工姓名為' + FName
FROM T_Employee
WHERE FName IS NOT NULL;

這也是許多開發者從 SQL Server 遷移至 MySQL 時容易踩坑的關鍵差異。

最佳實踐總結

場景推薦函數注意事項
一般字串拼接CONCAT參數含 NULL 會導致整體為 NULL,可用 IFNULL(col, '') 預處理
需固定分隔符(如 CSV、日誌)CONCAT_WS自動忽略 NULL,避免 ,, 空欄位
數值運算+確保雙方均為數值型別,或顯式 CAST

掌握 CONCAT 與 CONCAT_WS,即可在 MySQL 中優雅、高效地處理一切字串拼接需求,徹底告別 + 號帶來的隱式轉換驚喜。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved