+ (文字列連結) (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

文字列式の中の演算子であり、2 つ以上の文字列やバイナリ文字列、列、文字列と列名の組み合わせを 1 つの式に連結します (文字列演算子)。 SELECT 'book'+'case'; の例では、bookcase が返されます。

Transact-SQL 構文表記規則

構文

expression + expression  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

式 (expression)
文字型およびバイナリ型に分類される任意のデータ型を持つ有効なです。ただし、imagentext または text データ型は除きます。 両方の式は、同じデータ型でなければなりません。または、一方の式をもう一方の式のデータ型に暗黙的に変換できる必要があります。

2 つのバイナリ間にある任意の文字列を、その両端にあるバイナリ文字列と結合する場合、文字データへの明示的な変換を使用する必要があります。 次の例では、バイナリ連結で 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))  

戻り値の型

優先順位が最も高い引数のデータ型を返します。 詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。

解説

+ (文字列連結) 演算子は、長さがゼロの空の文字列に対して使用するときと、NULL、または不明な値に対して使用するときでは、動作が異なります。 長さがゼロの文字列は、間に文字を挟まない 2 つの単一引用符で指定できます。 長さがゼロのバイナリ文字列は、16 進定数で指定したバイト値を持たない 0x で指定できます。 長さがゼロの文字列の連結では、常に 2 つの指定された文字列を連結します。 NULL 値の文字列を操作した場合、連結の結果はセッションの設定によって決まります。 NULL 値に対して実行される算術演算の場合、既知の値に NULL 値を追加すると、結果は通常、不明な値になります。同様に、NULL 値に対して実行される文字列連結演算でも、NULL の結果を生成する必要があります。 ただし、現在のセッションの CONCAT_NULL_YIELDS_NULL の設定を変更することにより、この動作を変更できます。 詳細については、「SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)」を参照してください。

文字列の連結の結果が 8,000 バイトを超える場合、結果は切り捨てられます。 ただし、連結する文字列の少なくとも一方が大きな値の型の場合、切り捨ては行われません。

A. 文字列連結を使用する

次の例では、複数の文字の列から、Name という列見出しで単一の列を作成します。個人の姓に、コンマとスペース 1 つを連結し、さらにその名を連結します。 結果セットは、姓、名の順で昇順に表示されます。

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

B. 数値型と日付型を結合する

次の例では、CONVERT 関数を使用して、numeric 型と date データ型を連結します。

-- 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. 複数の文字列の連結を使用する

次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、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. 連結で長い文字列を使用する

次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、最終的な文字列の計算を試行します。 結果セットの最終的な長さは、式の評価が左から開始 (つまり、@x + @z + @y => (@x + @z) + @y) されるため、16000 です。 この場合、(@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. 複数の文字列の連結を使用する

次の例では、複数の文字列を連結して、サンプル データベースの副社長の姓と、名のイニシャルを表示する 1 つの長い文字列を形成します。 姓の後ろにコンマを追加し、名のイニシャルの後ろにピリオドを追加します。

-- 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)