MySQLで文字列結合を行う方法
MySQLで文字列結合を行う方法
MySQLを使用時、文字列結合を行いたい場合があるでしょう。
MySQLで文字列結合を行う方法は2つあります。
1つはCONCAT関数を使用して文字列結合を行う方法、もう1つは||(ダブルパイプ)を使用して文字列結合を行う方法です。
ここではMySQLで文字列結合を行う方法を説明します。
CONCAT関数を使用し文字列結合を行う方法
基本構文
CONCAT (文字列1, 文字列2, 文字列3,文字列n...)
上記コードのようにCONCAT関数の引数内にカンマで区切り、繋げたい文字列を複数記述することで文字列結合を行うことができます。
また、CONCAT関数の引数内にCONCAT関数を記述することもできます。
CONCATは様々なSQLの中で使用することができます。
サンプルコード
mysql> select CONCAT("Hello", "World");
+--------------------------+
| CONCAT("Hello", "World") |
+--------------------------+
| HelloWorld |
+--------------------------+
select CONCAT("Hello", "World")は"Hello"と"World"を文字列結合します。
そのためHelloWorldと表示されます。
CONCAT関数でテーブルの列を結合する方法
CONCAT関数を使用することでテーブルの列も結合することができます。
基本構文
SELECT CONCAT (列1, 列2, 列3,列n...) FROM [テーブル名];
このようにCONCAT関数の引数内にカンマで区切り、繋げたいカラム(列)を複数記述することで列を結合する事ができます。
サンプルコード
+-----------+------+--------+
| DEPT | ID | NAME |
+-----------+------+--------+
| 東京 | 1001 | 山田 |
| 大阪 | 1002 | 田中 |
| 名古屋 | 1003 | 山内 |
| 仙台 | 1004 | 山中 |
| 広島 | 1005 | 花田 |
+-----------+------+--------+
上記のテーブルはsampleという名前のテーブルです。
sampleのDEPTとIDを結合するには以下のコードを使用します。
mysql> SELECT CONCAT(DEPT,ID),NAME FROM sample;
実行結果
+-----------------+--------+
| CONCAT(DEPT,ID) | NAME |
+-----------------+--------+
| 東京1001 | 山田 |
| 大阪1002 | 田中 |
| 名古屋1003 | 山内 |
| 仙台1004 | 山中 |
| 広島1005 | 花田 |
+-----------------+--------+
実行結果をみてのとおり、CONCAT(DEPT,ID)で列が結合されて表示されています。
このようにCONCAT関数を使用することで列の結合をすることができます。
複数のレコードを1つに文字列結合する方法
GROUP_CONCATを使用することで複数のレコードを1つに文字列結合することもできます。
サンプルコード
mysql> select GROUP_CONCAT(DEPT SEPARATOR ".") from sample;
+---------------------------------------+
| GROUP_CONCAT(DEPT SEPARATOR ".") |
+---------------------------------------+
| 東京.大阪.名古屋.仙台.広島 |
+---------------------------------------+
sampleテーブルはCONCAT関数でテーブルの列を結合するのサンプルコードで紹介したsampleテーブルを使用しています。
GROUP_CONCAT(DEPT SEPARATOR ".")はDEPTのレコードを全て「.」で結合して1つの文字列にしています。
CONCAT関数の注意点
CONCAT関数は文字列結合やテーブルの列を結合など様々なSQLに使用できると説明しました。
ですがCONCAT関数内の引数にNULLがあると、結合結果はNULLになってしまいます。
mysql> select CONCAT("NAME","is",NULL);
+--------------------------+
| CONCAT("NAME","is",NULL) |
+--------------------------+
| NULL |
+--------------------------+
NULLを回避するにはIFNULL関数を使用します。
IFNULL関数は第一引数がNULLだった場合に第二引数を返します。
サンプルコード
mysql> select CONCAT("NAME","is",IFNULL(NULL,"EMPTY"));
+------------------------------------------+
| CONCAT("NAME","is",IFNULL(NULL,"EMPTY")) |
+------------------------------------------+
| NAMEisEMPTY |
+------------------------------------------+
このようにIFNULLを使用することで、CONCAT関数内にNULLがあっても文字列結合を行うことができます。
||(ダブルパイプ)を使用して文字列結合を行う方法
MySQLでは||はORとなってしまうためデフォルトで使うことできません。
||を文字列結合に使用したい場合はsql_modeにpipes_as_concatを設定します。
SET sql_mode='PIPES_AS_CONCAT';
Query OK, 0 rows affected (0.00 sec)
SET sql_mode='PIPES_AS_CONCAT';を実行した時「Query OK, 0 rows affected」と表示されれば設定完了です。
設定後、文字列と文字列の間に||を記述することで文字列結合を行うことができます。
また、MySQLを再起動すると設定は元にもどります。
サンプルコード
mysql> SELECT "Hello" || "World";
+--------------------+
| "Hello" || "World" |
+--------------------+
| HelloWorld |
+--------------------+
このようにpipes_as_concatを設定した後なら、||を使用し文字列結合を行うことができます。
まとめ
MySQLの文字列結合を行う方法を紹介しました。
文字列結合を行うにはCONCAT関数を使用する方法と||(ダブルパイプ)を使用する方法の2つがあります。