SQL ServerとAzureでは、2つ以上の文字列を連結する必要がある場合は、T-SQL CONCAT()
を使用できます。 働き。他の基本的な連結操作と同様に、この関数は文字列をエンドツーエンドで結合します。
しかし、各文字列の間に区切り文字を追加する必要がある場合はどうなりますか?
たとえば、文字列のコンマ区切りリストを作成したい場合があります。この場合、各文字列の間にカンマを挿入する必要があります。このように:
Paris, France
これの代わりに:
ParisFrance
幸い、T-SQLはCONCAT_WS()
を提供します あなたがまさにそれをするのを助ける関数。 CONCAT_WS()
関数はCONCAT()
と同じように機能します 関数。ただし、追加の引数(使用するセパレーター)が必要です。
次に例を示します:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
結果:
Location ------------ Paris,France
必要に応じて、そこにスペースを追加できます:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
結果:
Location ------------- Paris, France
セパレーター
区切り文字はカンマでなければならないことは言うまでもありません。区切り文字は、任意の文字タイプの式にすることができます(char
、nchar
、nvarchar
、またはvarchar
。
これは前の例と同じですが、これは別のセパレータを使用している点が異なります。
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
結果:
Location -------------- Paris - France
データベースの例
データベースからデータを取得し、2つの列をコンマで区切って1つに結合する例を次に示します。
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'THA';
結果:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
NULL値
引数のいずれかがNULL
の場合 値の場合、SQL Serverはその値とその区切り文字をスキップしますが、それでも他の値を処理します。
例:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
結果:
Location ------------- Paris, France
NULL値セパレーター
セパレータ自体がNULL
の場合 値の場合、連結操作は引き続き実行されますが、区切り文字はありません。
例:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
結果:
Location ----------- ParisFrance
これは、T-SQLとMySQLの違いの1つです(MySQLにはCONCAT_WS()
もあります 働き)。 MySQLでは、セパレータがNULL
の場合 値の場合、連結の結果はNULL
になります 値。