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

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

文字列式の中の演算子であり、2 つ以上の文字列やバイナリ文字列、列、文字列と列名の組み合わせを 1 つの式に連結します (文字列演算子)。An operator in a string expression that concatenates two or more character or binary strings, columns, or a combination of strings and column names into one expression (a string operator). SELECT 'book'+'case'; の例では、bookcase が返されます。For example SELECT 'book'+'case'; returns bookcase.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

expression + expression  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

式 (expression)expression
文字型およびバイナリ型に分類される任意のデータ型を持つ有効な です。ただし、imagentext または text データ型は除きます。Is any valid expression of any one of the data types in the character and binary data type category, except the image, ntext, or text data types. 両方の式は、同じデータ型でなければなりません。または、一方の式をもう一方の式のデータ型に暗黙的に変換できる必要があります。Both expressions must be of the same data type, or one expression must be able to be implicitly converted to the data type of the other expression.

2 つのバイナリ間にある任意の文字列を、その両端にあるバイナリ文字列と結合する場合、文字データへの明示的な変換を使用する必要があります。An explicit conversion to character data must be used when concatenating binary strings and any characters between the binary strings. 次の例では、バイナリ連結で CONVERT または CAST を使用する必要がある場合と、CONVERT または CAST を使用する必要がない場合を示します。The following example shows when CONVERT, or CAST, must be used with binary concatenation and when CONVERT, or CAST, does not have to be used.

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

戻り値の型Result Types

優先順位が最も高い引数のデータ型を返します。Returns the data type of the argument with the highest precedence. 詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。For more information, see Data Type Precedence (Transact-SQL).

解説Remarks

+ (文字列連結) 演算子は、長さがゼロの空の文字列に対して使用するときと、NULL、または不明な値に対して使用するときでは、動作が異なります。The + (String Concatenation) operator behaves differently when it works with an empty, zero-length string than when it works with NULL, or unknown values. 長さがゼロの文字列は、間に文字を挟まない 2 つの単一引用符で指定できます。A zero-length character string can be specified as two single quotation marks without any characters inside the quotation marks. 長さがゼロのバイナリ文字列は、16 進定数で指定したバイト値を持たない 0x で指定できます。A zero-length binary string can be specified as 0x without any byte values specified in the hexadecimal constant. 長さがゼロの文字列の連結では、常に 2 つの指定された文字列を連結します。Concatenating a zero-length string always concatenates the two specified strings. NULL 値の文字列を操作した場合、連結の結果はセッションの設定によって決まります。When you work with strings with a null value, the result of the concatenation depends on the session settings. NULL 値に対して実行される算術演算の場合、既知の値に NULL 値を追加すると、結果は通常、不明な値になります。同様に、NULL 値に対して実行される文字列連結演算でも、NULL の結果を生成する必要があります。Just like arithmetic operations that are performed on null values, when a null value is added to a known value the result is typically an unknown value, a string concatenation operation that is performed with a null value should also produce a null result. ただし、現在のセッションの CONCAT_NULL_YIELDS_NULL の設定を変更することにより、この動作を変更できます。However, you can change this behavior by changing the setting of CONCAT_NULL_YIELDS_NULL for the current session. 詳細については、「SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)」をご覧ください。For more information, see SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

文字列の連結の結果が 8,000 バイトを超える場合、結果は切り捨てられます。If the result of the concatenation of strings exceeds the limit of 8,000 bytes, the result is truncated. ただし、連結する文字列の少なくとも一方が大きな値の型の場合、切り捨ては行われません。However, if at least one of the strings concatenated is a large value type, truncation does not occur.

Examples

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

次の例では、複数の文字の列から、Name という列見出しで単一の列を作成します。個人の姓に、コンマとスペース 1 つを連結し、さらにその名を連結します。The following example creates a single column under the column heading Name from multiple character columns, with the last name of the person followed by a comma, a single space, and then the first name of the person. 結果セットは、姓、名の順で昇順に表示されます。The result set is in ascending, alphabetical order by the last name, and then by the first name.

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

B.B. 数値型と日付型を結合するCombining numeric and date data types

次の例では、CONVERT 関数を使用して、numeric 型と date データ型を連結します。The following example uses the CONVERT function to concatenate numeric and date data types.

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

結果セットは次のようになります。Here is the result set.

------------------------------------------------  
The order is due on 04/23/2007  
(1 row(s) affected)

C.C. 複数の文字列の連結を使用するUsing multiple string concatenation

次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、Adventure Works CyclesAdventure Works Cycles の副社長の姓と、名のイニシャルを表示します。The following example concatenates multiple strings to form one long string to display the last name and the first initial of the vice presidents at Adventure Works CyclesAdventure Works Cycles. 姓の後ろにコンマを追加し、名のイニシャルの後ろにピリオドを追加します。A comma is added after the last name and a period after the first initial.

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

結果セットは次のようになります。Here is the result set.

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.D. 連結で長い文字列を使用するUsing large strings in concatenation

次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、最終的な文字列の計算を試行します。The following example concatenates multiple strings to form one long string and then tries to compute the length of the final string. 結果セットの最終的な長さは、式の評価が左 (つまり、@x + @z + @y => (@x + @z) + @y) から開始されるため、16000 です。The final length of resultset is 16000, because expression evaluation starts from left that is, @x + @z + @y => (@x + @z) + @y. この場合、(@x + @z) の結果は、8000 バイトで切り捨てられ、@y が結果セットに追加され、文字列の最終的な長さは 16000 になります。In this case the result of (@x + @z) is truncated at 8000 bytes and then @y is added to the resultset, which makes the final string length 16000. @y は大きな値の型の文字列であるため、切り捨ては行われません。Since @y is a large value type string, truncation does not occur.

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

結果セットは次のようになります。Here is the result set.

y        
-------  
16000  
 
(1 row(s) affected)

例: Azure Synapse AnalyticsAzure Synapse AnalyticsParallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse

E.E. 複数の文字列の連結を使用するUsing multiple string concatenation

次の例では、複数の文字列を連結して、サンプル データベースの副社長の姓と、名のイニシャルを表示する 1 つの長い文字列を形成します。The following example concatenates multiple strings to form one long string to display the last name and the first initial of the vice presidents within a sample database. 姓の後ろにコンマを追加し、名のイニシャルの後ろにピリオドを追加します。A comma is added after the last name and a period after the first initial.

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

結果セットは次のようになります。Here is the result set.

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

参照See Also

+= (文字列連結代入) (Transact-SQL) += (String Concatenation Assignment) (Transact-SQL)
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
CAST および CONVERT (Transact-SQL) CAST and CONVERT (Transact-SQL)
データ型の変換 (データベース エンジン) Data Type Conversion (Database Engine)
データ型 (Transact-SQL) Data Types (Transact-SQL)
式 (Transact-SQL) Expressions (Transact-SQL)
組み込み関数 (Transact-SQL) Built-in Functions (Transact-SQL)
演算子 (Transact-SQL) Operators (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
SET ステートメント (Transact-SQL)SET Statements (Transact-SQL)