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

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

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

Transact-SQL 語法慣例

Syntax

expression + expression  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

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

當串連二進位字串和二進位字串之間的任何字元時,必須使用指向字元資料的明確轉換。 下列範例會顯示 CONVERTCAST 何時必須搭配二進位串連來使用,何時不需要使用 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  
-- 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)

備註

+ (字串串連) 運算子的行為,在使用空白、長度為零的字串時,與使用 NULL 或未知的值時,各不相同。 長度為零的字元字串可以指定為兩個單引號,引號內不含任何字元。 長度為零的二進位字串可以指定為不含以十六進位常數指定之任何二進位值的 0x。 串連長度為零的字串,一律會串連兩個指定的字串。 當您使用含 Null 值的字串時,串連結果會隨著工作階段設定而不同。 正如同在 Null 值上執行的算術運算,當未知的值加上 Null 值時,結果通常是未知的值,以 Null 值來執行的字串串連作業也應該產生 Null 結果。 不過,您可以變更目前工作階段的 CONCAT_NULL_YIELDS_NULL 設定來變更這個行為。 如需詳細資訊,請參閱 SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)

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

範例

A. 使用字串串連

下列範例會根據多個字元資料行,在 Name 資料行標題底下建立單一資料行,其中人員姓氏後面接著一個逗號、一個空格,再接著人員的名字。 結果集的排序,按先姓後名的字母順序來遞增。

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

B. 組合數值和日期資料類型

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

-- Uses AdventureWorks  
  
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  
(1 row(s) affected)

C. 使用多重字串串連

下列範例串連多個字串來形成一個長字串,以顯示 Adventure Works Cycles 副總裁的姓氏和第一個首字母。 在姓氏之後,加上逗號,在第一個首字母之後,加上句點。

-- Uses AdventureWorks  
  
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  

(3 row(s) affected)

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

下列範例會串連多個字串來形成一個長字串,然後嘗試計算最終字串的長度。 結果集的最終長度是 16000,因為運算式評估是從左邊開始的,亦即 @x + @z + @y => (@x + @z) + @y。 在此情況下,(@x + @z) 的結果會被截斷為 8000 個位元組,接著 @y 再加入至結果集,使最終字串長度為 16000。 因為 @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  
 
(1 row(s) affected)

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

E. 使用多重字串串連

下列範例串連多個字串來形成一個長字串,以顯示簡單資料庫中副總裁的姓氏和第一個首字母。 在姓氏之後,加上逗號,在第一個首字母之後,加上句點。

-- Uses AdventureWorks  
  
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  

另請參閱

+= (字串串連指派) (Transact-SQL)
ALTER DATABASE (Transact-SQL)
CAST 和 CONVERT (Transact-SQL)
資料類型轉換 (資料庫引擎)
資料類型 (Transact-SQL)
運算式 (Transact-SQL)
內建函數 (Transact-SQL)
運算子 (Transact-SQL)
SELECT (Transact-SQL)
SET 陳述式 (Transact-SQL)