MySQL で文字列をつなげる CONCAT()・CONCAT_WS()

SQL Server や Oracle では + や || をつかって文字列をつなげることができますが、MySQL ではそれらの演算子を使って文字列をつなげることができません。

ここでは MySQL で文字列をつなげる時に使われる CONCAT() と CONCAT_WS() 関数についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の CONCAT() 関数の使い方

MySQL の CONCAT() 関数は、複数の文字列を引数として受け取り、その文字列をつなげて返す関数です。

CONCAT(文字列1, 文字列2, 文字列3, ..., 文字列N);

引数にひとつでも NULL がある場合は、戻り値は NULL になります。

引数に数字が混ざっている場合は、文字列に変換されます。


それでは、CONCAT() 関数を使ってみましょう。

次のような students テーブルがあります。

MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 1


CONCAT() 関数を使って、first_name と last_name を間にスペースを入れてつないで、full_name として取得したい時は次のようにできます。

SELECT 	CONCAT(first_name, ' ', last_name) AS full_name
FROM 	students;

[実行結果]

MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 2

first_name と last_name をつなげた、full_name が取得できていますね。

first_name や last_name に NULL があると CONCAT() 関数の戻り値が NULL になってしまいます。

もし、NULL の時は空文字列のように扱いたい時は IFNULL(first_name, '') のように、NULL を空文字列に置き換えてから、CONCAT() 関数に渡してください。


MySQL の CONCAT_WS() 関数の使い方

MySQL の CONCAT_WS() 関数は、区切り文字列と複数の文字列を引数として受け取り、区切り文字列の後に続く文字列を、区切り文字列でつなげて返す関数です。

CONCAT_WS(区切り文字列, 文字列1, 文字列2, 文字列3, ..., 文字列N);

区切り文字列が NULL の時は戻り値は NULL になります。

区切り文字列以外の文字列に NULL があっても、その NULL はスキップしてつなげられた文字列が返ります。

引数に数字が混ざっている場合は、文字列に変換されます。


それでは、CONCAT_WS() 関数を使ってみましょう。

CONCAT_WS() 関数を使って、先ほどの students テーブルの first_name と last_name を間にスペースを入れてつないで、full_name として取得したい時は次のようにできます。

SELECT 	CONCAT_WS(' ', first_name, last_name) AS full_name
FROM 	students;

[実行結果]

MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 3

先ほどの同様に、first_name と last_name をスペースでつなげた、full_name が取得できていますね。


シングルクォーテーションで囲まれた文字列のつなげ方

MySQL では、あんまり使う時がないかもしれませんが、つなげたい文字列がシングルクォーテーションで囲まれた文字列の時は、それらの文字列を横にならべるだけでつなげることができます。

例えば、'a' 'b' 'c' という三つの文字列をつなげたい時は次のようにできます。

SELECT 'a' 'b' 'c';

[実行結果]

MySQL で文字列をつなげる CONCAT()・CONCAT_WS() 4

abc という文字列が取得できていますね。


以上、MySQL で文字列をつなげる時に使われる CONCAT() と CONCAT_WS() 関数についてご説明しました。

© 2024 MySQL 入門