+ (字串串連) (Transact-SQL)
這是字串運算式中的運算子,用來將兩個或更多字元或二進位字串、資料行,或字串和資料行名稱的組合,串連成單一運算式 (字串運算子)。
語法
expression + expression
引數
expression
這是字元和二進位資料類型類別目錄之任何資料類型的任何有效運算式,但 image、ntext 或 text 資料類型除外。兩個運算式的資料類型必須相同,或者其中一個運算式必須能夠以隱含方式轉換為另一個運算式的資料類型。當串連二進位字串和二進位字串之間的任何字元時,必須使用指向字元資料的明確轉換。下列範例會顯示 CONVERT 或 CAST 何時必須搭配二進位串連來使用,何時不需要使用 CONVERT 或 CAST。
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))
備註
+ (字串串連) 運算子的行為,在使用空白、長度為零的字串時,與使用 NULL 或未知的值時,各不相同。長度為零的字元字串可以指定為兩個單引號,引號內不含任何字元。長度為零的二進位字串可以指定為不含以十六進位常數指定之任何二進位值的 0x。串連長度為零的字串,一律會串連兩個指定的字串。當您使用含 Null 值的字串時,串連結果會隨著工作階段設定而不同。正如同在 Null 值上執行的算術運算,當未知的值加上 Null 值時,結果通常是未知的值,以 Null 值來執行的字串串連作業也應該產生 Null 結果。不過,您可以變更目前工作階段的 CONCAT_NULL_YIELDS_NULL 設定來變更這個行為。如需詳細資訊,請參閱<SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)>。
如果字串的串連結果超出 8,000 位元組的限制,就會截斷結果。不過,如果至少有一個串連的字串是大數值類型時,就不會截斷。
範例
A. 使用字串串連
下列範例會從多個字元資料行中,在 Name 資料行標題之下,建立一個單一資料行,連絡人姓氏後面接著一個逗號、一個空格,再接著連絡人的名字。結果集的排序,按先姓後名的字母順序來遞增。
USE AdventureWorks;
GO
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Contact
ORDER BY LastName ASC, FirstName ASC;
B. 組合數值和日期資料類型
下列範例利用 CONVERT 函數來串連 numeric 和 date 資料類型。
USE AdventureWorks;
GO
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/2003
(1 row(s) affected)
C. 使用多重字串串連
下列範例串連多個字串來形成一個長字串,以顯示 Adventure Works Cycles 副總裁的姓氏和第一個首字母。在姓氏之後,加上逗號,在第一個首字母之後,加上句點。
USE AdventureWorks;
GO
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.Title
FROM Person.Contact AS c
JOIN HumanResources.Employee AS e
ON c.ContactID = e.ContactID
WHERE e.Title 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)