mysql 文字列結合のconcat関数は||(パイプ)でスマートに書こう!
MySQLおよび、MariaDBでの文字列結合関数といえばCONCAT(コンキャット)です。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数
文字列結合にいちいちconcatなんていう関数を使うのはめんどくさい、且つわけがわからなくなるので、パイプ(||)ショートカットでconcatと同様の操作がおこなえるように変更するtipsです
concat を利用した場合
パッと見た限り、カンマが文字列なのかそうではないのかわからなくなりますよね汗
SELECT concat('現在の時刻は',current_timestamp,'です','明日は晴れかな?','雨かな?','晴れたらいいな') ;
- 結果
mysql> select -> concat('現在の時刻は',current_timestamp,'です,','明日は晴れかな?','雨かな?','晴れたらいいな') ; +---------------------------------------------------------------------------------------------------------------------------+ | concat('現在の時刻は',current_timestamp,'です','明日は晴れかな?','雨かな?','晴れたらいいな') | +---------------------------------------------------------------------------------------------------------------------------+ | 現在の時刻は2018-03-03 20:36:16です,明日は晴れかな?雨かな?晴れたらいいな | +---------------------------------------------------------------------------------------------------------------------------+
パイプを利用した場合
sql_modeにpipes_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'