CONCAT (Transact-SQL)
適用於:Microsoft Fabric Microsoft網
狀架構倉儲中的 SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Platform System (PDW)
SQL 分析端點
此函式會傳回透過以端對端方式串連 (或聯結) 兩個以上字串值所產生的字串。
注意
若要在串連期間新增分隔值,請使用 CONCAT_WS。
Syntax
CONCAT ( argument1 , argument2 [ , argumentN ] ... )
注意
若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件。
引數
argument1, argument2 [ , 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