次の方法で共有


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」を使用します。

Transact-SQL 構文表記規則

構文

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

引数

argument1argument2、[ , 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 である場合を除きます。 この場合、CONCATnvarchar(max) 型の結果を返します。
3. それ以外の場合、最大 4,000 文字の nvarchar 型の任意の引数 (nvarchar(<= 4000))) nvarchar(<= 4000)
4.その他のすべての場合 最大 8000 文字までの varchar 型の任意の引数 (varchar(<= 8000))。ただし、いずれかのパラメーターが任意の長さの nvarchar である場合を除きます。 その場合、CONCATnvarchar(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