CONCAT_WS (Transact-SQL)CONCAT_WS (Transact-SQL)

適用対象: ○SQL Server 2017 以降 ○Azure SQL Database ○Azure Synapse Analytics (SQL DW) ×Parallel Data Warehouse APPLIES TO: yesSQL Server 2017 and later yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

この関数は、連結の結果、またはエンド ツー エンドの方法で 2 つ以上の文字列値の結合の結果の文字列を返します。This function returns a string resulting from the concatenation, or joining, of two or more string values in an end-to-end manner. これらの連結文字列値を、最初の関数の引数に指定された区切り記号で区切ります。It separates those concatenated string values with the delimiter specified in the first function argument. (CONCAT_WS は "区切りを使用した連結" を示します。)(CONCAT_WS indicates concatenate with separator.)

構文Syntax

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

引数Arguments

separatorseparator
任意の文字型の式です (charncharnvarchar、または varchar)。An expression of any character type (char, nchar, nvarchar, or varchar).

argument1, argument2, argumentNargument1, argument2, argumentN
任意のデータ型の式。An expression of any type.

戻り値の型Return types

長さと型を入力に依存する文字列値。A string value whose length and type depend on the input.

解説Remarks

CONCAT_WS は、文字列引数の可変数を取得して、1 つの文字列に連結 (または結合) します。CONCAT_WS takes a variable number of string arguments and concatenates (or joins) them into a single string. これらの連結文字列値を、最初の関数の引数に指定された区切り記号で区切ります。It separates those concatenated string values with the delimiter specified in the first function argument. CONCAT_WS には、separator 引数と、他の 2 つの文字列値引数の最小値が必要です。指定しないと、CONCAT_WS でエラーが発生します。CONCAT_WS requires a separator argument and a minimum of two other string value arguments; otherwise, CONCAT_WS will raise an error. CONCAT_WS は連結する前に、すべての引数を文字列型に暗黙的に変換します。CONCAT_WS implicitly converts all arguments to string types before concatenation.

文字列への暗黙の変換は、データ型変換の既存の規則に従います。The implicit conversion to strings follows the existing rules for data type conversions. 動作とデータ型変換の詳細について、「CONCAT (Transact-SQL)」を参照してください。See CONCAT (Transact-SQL) for more information about behavior and data type conversions.

NULL 値の処理方法Treatment of NULL values

CONCAT_WSSET CONCAT_NULL_YIELDS_NULL {ON|OFF} 設定を無視します。CONCAT_WS ignores the SET CONCAT_NULL_YIELDS_NULL {ON|OFF} setting.

CONCAT_WS はすべて NULL 値の引数を受け取ると、varchar(1) 型の空の文字列を返します。If CONCAT_WS receives arguments with all NULL values, it will return an empty string of type varchar(1).

CONCAT_WS は連結時に null 値を無視し、null 値間に区切りを追加しません。CONCAT_WS ignores null values during concatenation, and does not add the separator between null values. そのため、CONCAT_WS は値が空の文字列、たとえば 2 つ目のアドレス フィールドの連結を適切に処理できます。Therefore, CONCAT_WS can cleanly handle concatenation of strings that might have "blank" values - for example, a second address field. 詳細については、例 B を参照してください。See example B for more information.

区切り記号で区切られた null 値があるシナリオの場合は、ISNULL 関数の使用を検討してください。If a scenario involves null values separated by a delimiter, consider the ISNULL function. 詳細については、例 C を参照してください。See example C for more information.

Examples

A.A. 区切りで値を連結するConcatenating values with separator

この例では、値を - で区切って、sys.databases テーブルの 3 つの列を連結します。This example concatenates three columns from the sys.databases table, separating the values with a -.

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

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

DatabaseInfoDatabaseInfo
1 - SIMPLE - NONE1 - SIMPLE - NONE
2 - SIMPLE - NONE2 - SIMPLE - NONE
3 - FULL - NONE3 - FULL - NONE
4 - SIMPLE - NONE4 - SIMPLE - NONE

B.B. Null 値をスキップするSkipping NULL values

この例では、引数リスト内の NULL 値は無視されます。This example ignores NULL values in the arguments list.

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

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

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

C.C. テーブルから CSV ファイルを生成するGenerating CSV file from table

この例では、区切り値としてコンマ , を使用し、復帰文字 char(13) を追加して、結果セットの列区切り値形式にします。This example uses a comma , as the separator value, and adds the carriage return character char(13) in the column separated values format of the result set.

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

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

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

CONCAT_WS は、列の NULL 値を無視します。CONCAT_WS ignores NULL values in the columns. ISNULL 関数を使用して null 許容の列をラップし、既定値を指定します。Wrap a nullable column with the ISNULL function, and provide a default value. 詳細については、次の例を参照してください。See this example for more:

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

参照See also

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