分享方式:


+ (字串串連) (Transact-SQL)

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

這是字串運算式中的運算子,用來將兩個或更多字元或二進位字串、資料行,或字串和資料行名稱的組合,串連成單一運算式 (字串運算子)。 例如 SELECT 'book'+'case'; 會傳回 bookcase

Transact-SQL 語法慣例

語法

expression + expression

引數

expression

字元和二進位數據類型類別目錄中任何一個數據類型的任何有效運算式,但 imagentexttext 數據類型除外。 兩個運算式的資料類型必須相同,或者其中一個運算式必須可以用隱含方式轉換為另一個運算式的資料類型。

傳回類型

傳回優先順序最高之引數的資料類型。 如需詳細資訊,請參閱 數據類型優先順序

備註

如果字串的串連結果超出 8,000 位元組的限制,就會截斷結果。 不過,如果至少有一個串連的字串是大型實值型別,則不會發生截斷。

長度為零的字串和字元

字串 + 串連運算符在處理空的、長度為零的字串時,其行為與使用 NULL、 或未知值時的行為不同。 長度為零的字元字串可以指定為兩個單引號,引號內不含任何字元。 零長度的二進位字串可以指定為 0x ,而不需在十六進位常數中指定的任何位元元組值。 串連長度為零的字串,一律會串連兩個指定的字串。

NULL 值的串連

當您使用 NULL 具有值的字串時,串連的結果取決於會話設定。 如同在值上 NULL 執行的算術運算,當值新增至已知值時 NULL ,結果通常是未知的值,使用值執行的 NULL 字串串連運算也應該產生 NULL 結果。

不過,您可以變更目前工作階段的 CONCAT_NULL_YIELDS_NULL 設定來變更這個行為。 如需詳細資訊,請參閱 SET CONCAT_NULL_YIELDS_NULL

必要時使用 CAST 和 CONVERT

當串連二進位字串和二進位字串之間的任何字元時,必須使用指向字元資料的明確轉換。

下列範例顯示 當 CONVERT、 或 必須搭配二進位串連使用,且 當 、 或CASTCAST不需要使用時CONVERT

在此範例中,不需要 CONVERTCAST 函式,因為此範例會串連兩個二進位字串。

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);

SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2;

在此範例中,需要 或 CAST 函式,CONVERT因為此範例會串連兩個二進位字元串加上空格。

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);

SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;

-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '
   + CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '
   + CAST(@mybin2 AS VARCHAR(5));

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。

A. 使用字串串連

下列範例會從多個字元數據行建立數據行標題 Name 底下的單一數據行,其家族名稱後面接著逗號、單一空格,然後建立人員的名字。 結果集會依姓氏遞增、依字母順序排列,然後依名字排列。

SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;

B. 結合數值和日期數據類型

下列範例利用 CONVERT 函數來串連 numericdate 資料類型。

SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO

結果集如下所示。

------------------------------------------------
The order is due on 04/23/2007

C. 使用多個字串串連

下列範例會串連多個字串,以形成一個長字串,以顯示家族名稱和 Adventure Works Cycles 中第一個副總統的縮寫。 在系列名稱後面加上逗號,並在第一個初始之後加上句點。

SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle
FROM Person.Person AS p
    JOIN HumanResources.Employee AS e
    ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO

結果集如下所示。

Name               Title
-------------      ---------------`
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales

D. 在串連中使用大型字串

下列範例會串連多個字串來形成一個長字串,然後嘗試計算最終字串的長度。 結果集的最終長度為 16,000,因為表示式評估從左邊開始,@x@z + @y + 也就是 => (@x + @z) + 。 @y 在此情況下,將 (@x + @z) 的結果截斷為 8,000 個字節,然後 @y 新增至結果集,讓最終字串長度為 16,000。 由於 @y 是大型實值型別字串,因此不會發生截斷。

DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO

結果集如下所示。

y
-------
16000

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。

E. 使用多個字串串連

下列範例會串連多個字串,以形成一個長字串,以顯示家族名稱和範例資料庫中第一個副總統的初始。 在系列名稱後面加上逗號,並在第一個初始之後加上句點。

SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;

結果集如下所示。

Name               Title
-------------      ---------------
Duffy, T.          Vice President of Engineering
Hamilton, J.       Vice President of Production
Welcker, B.        Vice President of Sales