Database JUNKY

MySQL,MariaDBを中心としたブログです

mysql 文字列結合のconcat関数は||(パイプ)でスマートに書こう!

MySQLおよび、MariaDBでの文字列結合関数といえばCONCAT(コンキャット)です。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数

文字列結合にいちいちconcatなんていう関数を使うのはめんどくさい、且つわけがわからなくなるので、パイプ(||)ショートカットでconcatと同様の操作がおこなえるように変更するtipsです

ビッグデータ分析・活用のためのSQLレシピ

concat を利用した場合

パッと見た限り、カンマが文字列なのかそうではないのかわからなくなりますよね汗

SELECT
  concat('現在の時刻は',current_timestamp,'です','明日は晴れかな?','雨かな?','晴れたらいいな') ;
  • 結果
mysql> select                                                                                                                                     
    ->   concat('現在の時刻は',current_timestamp,'です,','明日は晴れかな?','雨かな?','晴れたらいいな') ;
+---------------------------------------------------------------------------------------------------------------------------+
| concat('現在の時刻は',current_timestamp,'です','明日は晴れかな?','雨かな?','晴れたらいいな')                            |
+---------------------------------------------------------------------------------------------------------------------------+
| 現在の時刻は2018-03-03 20:36:16です,明日は晴れかな?雨かな?晴れたらいいな                                                |
+---------------------------------------------------------------------------------------------------------------------------+

パイプを利用した場合

sql_modepipes_as_concatを設定すれば、パイプで文字列結合をすることができるようになります。パイプでSQLを記載したほうがスマートです。

設定

sql_modeでの設定

mysql再起動時に、設定は元に戻ってしまいますが、一時的であればこれでもパイプショートカットが使えるようになります

mysql> SET sql_mode='PIPES_AS_CONCAT' ;
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> SELECT
    ->   '現在の時刻は' || current_timestamp || 'です,' || '明日は晴れかな?' || '雨かな?' || '晴れたらいいな';
+----------------------------------------------------------------------------------------------------------------------------------+
| '現在の時刻は' || current_timestamp || 'です,' || '明日は晴れかな?' || '雨かな?' || '晴れたらいいな'                            |
+----------------------------------------------------------------------------------------------------------------------------------+
| 現在の時刻は2014-03-03 20:38:31です,明日は晴れかな?雨かな?晴れたらいいな                                                       |
+----------------------------------------------------------------------------------------------------------------------------------+

my.cnfでの設定

このようにしておけば、MySQL再起動時もパイプでの文字列結合が保守されます

cat /etc/my.cnf
------------------------------
[mysqld]
sql_mode = 'PIPES_AS_CONCAT'

f:id:hit10231023:20180309104332j:plain

f:id:hit10231023:20180309103851j:plain