CONCAT_WS (Transact-SQL)

適用対象: SQL Server 2017 (14.x) 以降 Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

この関数は、連結の結果、またはエンド ツー エンドの方法で 2 つ以上の文字列値の結合の結果の文字列を返します。 これらの連結文字列値を、最初の関数の引数に指定された区切り記号で区切ります。 (CONCAT_WS は "区切りを使用した連結" を示します。)

構文

CONCAT_WS ( separator, argument1, argument2 [, argumentN]... )

Note

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

引数

separator 任意の文字型の式です (charncharnvarchar、または varchar)。

argument1, argument2, argumentN 任意の型の式です。 CONCAT_WS 関数では、2 個以上、254 個未満の引数が必要です。

戻り値の型

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

解説

CONCAT_WS は、文字列引数の可変数を取得して、1 つの文字列に連結 (または結合) します。 これらの連結文字列値を、最初の関数の引数に指定された区切り記号で区切ります。 CONCAT_WS には、separator 引数と、他の 2 つの文字列値引数の最小値が必要です。指定しないと、CONCAT_WS でエラーが発生します。 CONCAT_WS は連結する前に、すべての引数を文字列型に暗黙的に変換します。

文字列への暗黙の変換は、データ型変換の既存の規則に従います。 動作とデータ型変換の詳細について、「CONCAT (Transact-SQL)」を参照してください。

NULL 値の処理方法

CONCAT_WSSET CONCAT_NULL_YIELDS_NULL {ON|OFF} 設定を無視します。

CONCAT_WS はすべて NULL 値の引数を受け取ると、varchar(1) 型の空の文字列を返します。

CONCAT_WS は連結時に null 値を無視し、null 値間に区切りを追加しません。 そのため、CONCAT_WS は値が空の文字列、たとえば 2 つ目のアドレス フィールドの連結を適切に処理できます。 詳細については、例 B を参照してください。

区切り記号で区切られた null 値があるシナリオの場合は、ISNULL 関数の使用を検討してください。 詳細については、例 C を参照してください。

A. 区切りで値を連結する

この例では、値を - で区切って、sys.databases テーブルの 3 つの列を連結します。

SELECT CONCAT_WS( ' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;

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

DatabaseInfo
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE

B. Null 値をスキップする

この例では、引数リスト内の NULL 値は無視されます。

SELECT CONCAT_WS(',','1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;

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

Address
------------   
1 Microsoft Way,Redmond,WA,98052

C. テーブルからの CSV 形式のデータの生成

この例では、区切り値としてコンマ , を使用し、復帰文字 char(13) を追加して、結果セットの列区切り値形式にします。

SELECT 
STRING_AGG(CONCAT_WS( ',', database_id, recovery_model_desc, containment_desc), char(13)) AS DatabaseInfo
FROM sys.databases

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

DatabaseInfo
------------   
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE 
4,SIMPLE,NONE 

CONCAT_WS は、列の NULL 値を無視します。 ISNULL 関数を使用して null 許容の列をラップし、既定値を指定します。 詳細については、次の例を参照してください。

SELECT 
STRING_AGG(CONCAT_WS( ',', database_id, ISNULL(recovery_model_desc,''), ISNULL(containment_desc,'N/A')), char(13)) AS DatabaseInfo
FROM sys.databases;

関連項目

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