MySQLのCONCAT関数についてまとめてみました。
CONCAT関数で文字列を結合
まず、CONCAT関数とは何?という話ですが、
文字列を結合するための関数です。
例えば、
SELECT CONCAT('MySQL', 'の', 'CONCAT関数')
というSQLクエリを実行すると、
「MySQLのCONCAT関数」という文字列が返ってきます。
もちろん、上記のような感じで文字列を結合させるだけであれば、
PHP側でやれ!という話になるので、このような使い方はあまりしません。
では、どのような使い方をするのかというと、
例えば、カラムと文字列を結合したい場合や、複数のカラム同士を結合するのに使用します。
例:
ユーザー管理テーブル(テーブル名「user」)に、
・年を保持している項目「カラム名:year」
・月を保持している項目「カラム名:month」
・日を保持している項目「カラム名:day」
を持っているとした場合、
SELECT CONCAT(year, month, day) FROM user
を実行することで、
「20190608」というように年月日の値を結合して結果を得ることが出来ます。
また、
SELECT CONCAT(year, '-', month, '-', day) FROM user
とすれば、
「2019-06-08」といった結果を得ることも出来ます。
さらに、
SELECT CONCAT('こちらのユーザーは', year, '年', month, '月', day, '日に登録されました。') FROM user
とすれば、
「こちらのユーザーは2019年06月08日に登録されました。」といった結果を得ることも出来ます。
便利ですね!
因みに、通常は年月日を別々のカラムに持たせるということはあまりしないので、
あくまで、このような使い方が出来るという参考にして貰えればと思います。
CONCAT関数で結合した値で比較を行ってレコードを取得
CONCAT関数で結合した値で比較を行、該当データ(レコード)のみを取得するということも可能です。
上記のテーブルを例にすると、
SELECT user_name FROM user WHERE CONCAT(year, month, day) = '20190618'
とすることで、
「20190618」に登録されたデータのみを取得するということが可能です。
また、
SELECT user_name FROM user WHERE CONCAT(year, month, day) < '20190618'
とすることで、
「20190618」よりも前に登録したデータのみを取得するということも可能です。
因みに、
数値で比較を行うような場合には、
CAST関数で数値に変換しておいた方がいいかもしれないですね。
SELECT user_name FROM user WHERE CAST(CONCAT(year, month, day) AS SIGNED) > 20190618
みたいな感じで。
↓
文字列のキャストにはCAST関数を使用します。
例えば、(カラム AS SIGNED)で数値型に変換することが可能です。
この記事へのコメントはありません。