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

SQL Server 2012 全新字串串聯函數 CONCAT 詳細解析

     編輯:關於SqlServer

從 + 號到 CONCAT:字串串聯的進化

在 SQL Server 2012 之前,字串串聯只能使用 + 運算子,但這帶來一個經典陷阱:任一運算元為 NULL,整個結果即為 NULL。開發人員不得不寫大量 ISNULL 或 COALESCE 來處理,程式碼既冗長又易漏錯。

舊版寫法的痛點

/* 不含 NULL 時正常 */
DECLARE @t1 varchar(10) = 'a', @t2 varchar(10) = 'b', @t3 varchar(10) = 'c', @t4 varchar(10) = 'd', @N1 int = 2012;
SELECT @t1 + @t2 + @t3 + @t4 + CONVERT(varchar(10), @N1) AS result;  -- 'abcd2012'

/* 含 NULL 時全變 NULL */
DECLARE @t3 varchar(10) = NULL;
SELECT @t1 + @t2 + @t3 + @t4 + CONVERT(varchar(10), @N1) AS result;  -- NULL

/* 必須逐一包 ISNULL */
SELECT @t1 + @t2 + ISNULL(@t3, '') + @t4 + CONVERT(varchar(10), @N1) AS result;  -- 'abd2012'

CONCAT 函數的優雅解法

SQL Server 2012 引入 CONCAT,自動將 NULL 視為空字串,並支援任意數量參數、自動處理資料型別轉換:

/* 直接串聯字面值 */
SELECT CONCAT('a','b','c','d','2012') AS result;  -- 'abcd2012'

/* 變數串聯,含 NULL 也不會變 NULL */
DECLARE @t1 varchar(10) = 'a', @t2 varchar(10) = 'b', @t3 varchar(10) = NULL, @t4 varchar(10) = 'd', @N1 int = 2012;
SELECT CONCAT(@t1, @t2, @t3, @t4, @N1) AS result;  -- 'abd2012'

效能與相容性補充

  • 效能:CONCAT 內部優化過,通常比多重 + + ISNULL 更快。
  • 資料型別:依照優先序自動轉換為 NVARCHAR(MAX) 或 VARCHAR(MAX),超長字串也能安全處理。
  • 相容性:資料庫相容性層級需 ≥ 110 (SQL Server 2012) 才能使用。

最佳實務建議

  1. 新專案全面改用 CONCAT,減少 NULL 相關 Bug。
  2. 舊程式碼重構時,將 ISNULL(col, '') 模式替換為 CONCAT。
  3. 需保留 NULL 語意(如區分「無資料」與「空字串」)時,仍用 + 配合 CASE 處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved