CONCAT (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
この関数は、連結の結果、またはエンド ツー エンドの方法で 2 つ以上の文字列値の結合の結果の文字列を返します。
Note
連結時に区切り値を追加するには、「CONCAT_WS」を使用します。
構文
CONCAT ( argument1 , argument2 [ , argumentN ] ... )
引数
argument1、argument2、[ , argumentN ]
任意の文字列値の式。 CONCAT
関数では、2 個以上、254 個未満の引数が必要です。
戻り値の型
長さと型を入力に依存する文字列値。
解説
CONCAT
は、文字列引数の可変数を取得して、1 つの文字列に連結 (または結合) します。 最小で 2 つの入力値が必要です。それ以外の場合は、CONCAT
でエラーが発生します。 CONCAT
は連結する前に、すべての引数を文字列型に暗黙的に変換します。 CONCAT
は null 値を空の文字列に暗黙的に変換します。 CONCAT
はすべて NULL
値の引数を受け取ると、varchar(1) 型の空の文字列を返します。 文字列への暗黙の変換は、データ型変換の既存の規則に従います。 データ型の変換の詳細については、「CAST および CONVERT (Transact-SQL)」を参照してください。
戻り値の型は、引数の種類によって異なります。 次の表に、マッピングを示します。
入力の種類 | 出力型と長さ |
---|---|
1. SQL-CLR システム型の任意の引数、SQL-CLR UDT、または nvarchar(max) | nvarchar(max) |
2. それ以外の場合、varbinary (max) 型または varchar (max) 型の任意の引数 | varchar(max) 。ただし、いずれかのパラメーターが任意の長さの nvarchar である場合を除きます。 この場合、CONCAT は nvarchar(max) 型の結果を返します。 |
3. それ以外の場合、最大 4,000 文字の nvarchar 型の任意の引数 (nvarchar(<= 4000))) | nvarchar(<= 4000) |
4.その他のすべての場合 | 最大 8000 文字までの varchar 型の任意の引数 (varchar(<= 8000))。ただし、いずれかのパラメーターが任意の長さの nvarchar である場合を除きます。 その場合、CONCAT は nvarchar(max) 型の結果を返します。 |
CONCAT
が <= 4000 文字の長さの nvarchar 入力引数、または <= 8000 文字の長さの varchar 入力引数を受け取ると、暗黙的な変換が、結果の長さに影響を及ぼす可能性があります。 他のデータ型は、暗黙的に文字列に変換された場合は異なる長さになります。 たとえば、値 14
を持つ int の文字列の長さは 2 ですが、値 1234.56789
を持つ float の長さは 7 (1234.57
) です。 そのため、これら 2 つの整数の連結は、少なくとも 9 文字の長さの結果を返します。
入力引数がサポートされるラージ オブジェクト (LOB) の型ではない場合、戻り値の型に関係なく、戻り値の型は長さ 8,000 文字に切り詰められます。 この切り捨てによりスペースが保持され、効率的なプラン生成をサポートします。
CONCAT
は、SQL Server 2012 (11.x) 以降のバージョンを実行しているリンク サーバーでリモートで実行できます。 古いバージョンのリンク サーバーでは、リンク サーバーが非連結された値を返した後で、CONCAT
操作がローカルに実行されます。
例
A. CONCAT を使用する
SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;
結果セットは次のとおりです。
Result
--------------------
Happy Birthday 11/25
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