分享方式:


CONCAT (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

此函式會傳回透過以端對端方式串連 (或聯結) 兩個以上字串值所產生的字串。

注意

若要在串連期間新增分隔值,請使用 CONCAT_WS

Transact-SQL 語法慣例

語法

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

引數

argument1argument2 [ , argumentN ]

任何字串值的表達式。 CONCAT 函式需要至少兩個引數,而且不能超過 254 個引數。

傳回類型

長度和類型取決於輸入的字串值。

備註

CONCAT 會採用可變數量的字串引數,並將其串連 (聯結) 成單一字串。 它至少需要兩個輸入值:否則, CONCAT 會引發錯誤。 CONCAT 會在串連之前將所有引數隱含地轉換成字串類型。 CONCAT 會將 Null 值隱含地轉換成空字串。 如果CONCAT收到具有所有NULL值的自變數,則會傳回 varchar(1) 類型的空字串。 隱含轉換成字串會遵循現有的資料類型轉換規則。 如需有關資料類型轉換的詳細資訊,請參閱 CAST 和 CONVERT (Transact-SQL)

傳回類型取決於引數類型。 此表說明對應:

輸入類型 輸出類型及長度
1.SQL-CLR 系統類型、SQL-CLR UDT 或 nvarchar(max) 的任何自變數 nvarchar(max)
2. 否則,varbinary(max)varchar(max) 類型的任何自變數 varchar(max) ,除非其中一個參數是任何長度的 nvarchar。 在此情況下,CONCAT 會傳回 nvarchar(max) 類型的結果。
3. 否則,nvarchar 類型為最多 4000 個字元的任何自變數(nvarchar(<= 4000)) nvarchar(<= 4000
4.在所有其他情況下 varchar 類型為最多 8000 個字元的任何自變數(varchar(<= 8000),除非其中一個參數是任何長度的 nvarchar。 在該情況下,CONCAT 會傳回 nvarchar(max) 類型的結果。

CONCAT 收到長度 <= 4000 個字元的 nvarchar 輸入引數,或長度 <= 8000 個字元的 varchar 輸入引數時,隱含轉換會影響結果長度。 其他資料類型在隱含地轉換成字串時,長度會不同。 例如,值為 14 的 int 字串長度為 2,而具有值的1234.56789浮點數則字串長度為 7 (1234.57)。 因此,這兩個值的串連會傳回長度不超過 9 個字元的結果。

如果沒有任何輸入自變數具有支援的大型物件 (LOB) 類型,則不論傳回型別為何,傳回型別都會截斷為長度為 8,000 個字元。 這項截斷可以保留空間,讓產生計畫更具效率。

CONCAT 可以在執行 SQL Server 2012 (11.x) 和更新版本的連結伺服器上從遠端執行。 對於較舊的連結伺服器, CONCAT 在鏈接的伺服器傳回非串連值之後,作業將會在本機進行。

範例

A. 使用 CONCAT

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

結果集如下所示。

Result
--------------------
Happy Birthday 11/25

B. 搭配 NULL 值使用 CONCAT

CREATE TABLE #temp (
    emp_name NVARCHAR(200) NOT NULL,
    emp_middlename NVARCHAR(200) NULL,
    emp_lastname NVARCHAR(200) NOT NULL
    );

INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');

SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;

結果集如下所示。

Result
------------
NameLastname