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

適用対象:Applies to: はいSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) 以降 はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics適用対象:Applies to: はいSQL Server 2017 (14.x)SQL Server 2017 (14.x)yesSQL Server 2017 (14.x)SQL Server 2017 (14.x) and later はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics

この関数は、連結の結果、またはエンド ツー エンドの方法で 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]... )

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

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

argument1, argument2, argumentN 任意の型の式です。argument1, argument2, argumentN An expression of any type. CONCAT_WS 関数では、2 個以上、254 個未満の引数が必要です。The CONCAT_WS function requires at least two arguments, and no more than 254 arguments.

戻り値の型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)