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 テーブルがあります。
CONCAT() 関数を使って、first_name と last_name を間にスペースを入れてつないで、full_name として取得したい時は次のようにできます。
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
[実行結果]
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;
[実行結果]
先ほどの同様に、first_name と last_name をスペースでつなげた、full_name が取得できていますね。
シングルクォーテーションで囲まれた文字列のつなげ方
MySQL では、あんまり使う時がないかもしれませんが、つなげたい文字列がシングルクォーテーションで囲まれた文字列の時は、それらの文字列を横にならべるだけでつなげることができます。
例えば、'a' 'b' 'c' という三つの文字列をつなげたい時は次のようにできます。
SELECT 'a' 'b' 'c';
[実行結果]
abc という文字列が取得できていますね。
以上、MySQL で文字列をつなげる時に使われる CONCAT() と CONCAT_WS() 関数についてご説明しました。