CONCAT (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

この関数は、連結の結果、またはエンド ツー エンドの方法で 2 つ以上の文字列値の結合の結果の文字列を返します。 (連結時に区切り値を追加するには、「CONCAT_WS」をご覧ください。)

トピック リンク アイコン Transact-SQL 構文表記規則

構文

CONCAT ( string_value1, string_value2 [, string_valueN ] )  

注意

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

引数

string_value
他の値に連結する文字列値です。 CONCAT 関数では、2 個以上、254 個未満の string_value 引数が必要です

戻り値の型

string_value
長さと型を入力に依存する文字列値。

解説

CONCAT は、文字列引数の可変数を取得して、1 つの文字列に連結 (または結合) します。 最小で 2 つの入力値が必要です。それ以外の場合は、CONCAT でエラーが発生します。 CONCAT は連結する前に、すべての引数を文字列型に暗黙的に変換します。 CONCAT は null 値を空の文字列に暗黙的に変換します。 CONCAT はすべて NULL 値の引数を受け取ると、varchar(1) 型の空の文字列を返します。 文字列への暗黙の変換は、データ型変換の既存の規則に従います。 データ型変換の詳細については、「CAST および CONVERT (Transact-SQL)」を参照してください。

戻り値の型は、引数の種類によって異なります。 次の表に、マッピングを示します。

入力の種類 出力型と長さ
1.次の任意の引数

SQL-CLR システム型

SQL CLR UDT

or

nvarchar(max)
nvarchar(max)
2.それ以外の場合、次の型の任意の引数

varbinary(max)

or

varchar(max)
varchar(max) 。ただし、いずれかのパラメーターが任意の長さの nvarchar である場合を除きます。 この場合、CONCATnvarchar(max) 型の結果を返します。
3.それ以外の場合、最大 4,000 文字の nvarchar 型の任意の引数

( nvarchar(<= 4000) )
nvarchar(<= 4000)
4.その他のすべての場合 varchar(<= 8000) (最大 8,000 文字の varchar)。ただし、いずれかのパラメーターが任意の長さの nvarchar である場合を除きます。 その場合、CONCATnvarchar(max) 型の結果を返します。

CONCAT が 4000 文字以下の長さの nvarchar 入力引数、または 8000 文字以下の長さの varchar 入力引数を受け取ると、暗黙的な変換が結果の長さに影響する可能性があります。 他のデータ型は、暗黙的に文字列に変換された場合は異なる長さになります。 たとえば、int (14) の文字列の長さは 12 ですが、float の長さは 32 です。 そのため、2 つの整数の連結は、24 以上の長さを持つ結果を返します。

入力引数がサポートされるラージ オブジェクト (LOB) の型ではない場合、戻り値の型に関係なく、戻り値の型は長さ 8000 文字に切り詰められます。 この切り捨てによりスペースが保持され、効率的なプラン生成をサポートします。

CONCAT 関数は、バージョン SQL Server 2012 (11.x) 以降のリンク サーバーでリモートで実行することができます。 古いバージョンのリンク サーバーでは、リンク サーバーが非連結された値を返した後で、CONCAT 操作がローカルに実行されます。

A. CONCAT を使用する

SELECT CONCAT ( 'Happy ', 'Birthday ', 11, '/', '25' ) AS Result;  

結果セットは次のようになります。

Result  
-------------------------  
Happy Birthday 11/25  
  
(1 row(s) affected)  

B. NULL 値を持つ CONCAT を使用する

CREATE TABLE #temp (  
    emp_name NVARCHAR(200) NOT NULL,  
    emp_middlename NVARCHAR(200) NULL,  
    emp_lastname NVARCHAR(200) NOT NULL  
);  
INSERT INTO #temp VALUES( 'Name', NULL, 'Lastname' );  
SELECT CONCAT( emp_name, emp_middlename, emp_lastname ) AS Result  
FROM #temp;  

結果セットは次のようになります。

Result  
------------------  
NameLastname  
  
(1 row(s) affected)  

関連項目

CONCAT_WS (Transact-SQL)
FORMATMESSAGE (Transact-SQL)
QUOTENAME (Transact-SQL)
REPLACE (Transact-SQL)
REVERSE (Transact-SQL)
STRING_AGG (Transact-SQL)
STRING_ESCAPE (Transact-SQL)
STUFF (Transact-SQL)
TRANSLATE (Transact-SQL)
文字列関数 (Transact-SQL)