MySQLでは、CONCAT_WS()
関数を使用すると、連結された文字列にセパレータを追加できます。 CONCAT()
を使用する場合 関数の場合、セパレータはありません(各文字列引数の間に引数としてセパレータを明示的に追加しない限り)。
CONCAT_WS()
の一般的な使用法 関数は、コンマ区切りのリストを作成することです。
次に例を示します:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
結果:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
必要に応じて、そこにスペースを追加できます:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
結果:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
セパレーター
区切り文字はカンマでなければならないことは言うまでもありません。区切り文字は任意の文字列にすることができます。
これは前の例と同じですが、これは別のセパレータを使用している点が異なります。
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 = 'NZL';
結果:
+---------------------------+ | Location | +---------------------------+ | Auckland, New Zealand | | Christchurch, New Zealand | | Manukau, New Zealand | | North Shore, New Zealand | | Waitakere, New Zealand | | Wellington, New Zealand | | Dunedin, New Zealand | | Hamilton, New Zealand | | Lower Hutt, New Zealand | +---------------------------+
NULL値
引数のいずれかがNULL
の場合 値の場合、MySQLはその値とそのセパレータをスキップしますが、それでも他の値を処理します。
例:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
結果:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
NULL値セパレーター
セパレータ自体がNULL
の場合 値の場合、連結操作はNULL
を返します 。
例:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
結果:
+----------+ | Location | +----------+ | NULL | +----------+
これは、MySQLとT-SQL(SQL Server、Azure)の違いの1つです。 T-SQLで、区切り文字がNULL
の場合 valueの場合、文字列値は引き続き連結されますが、区切り文字はありません。