CURDATE()関数に時間単位のINTERVALを指定した場合、MySQLはどのように動作するのか?
CURDATE()関数と時間単位のINTERVALの組み合わせについて
MySQLのCURDATE()関数は、現在の日付のみを返す関数です。そのため、CURDATE()に対して「時」や「分」といった時間単位のINTERVALを加算すると、一見すると動作が曖昧に思えるかもしれません。
しかし、MySQLでは現在の日付を内部的に「00:00:00」という時刻とともに扱います。したがって、CURDATE()に時間単位のINTERVALを適用した場合、この「00:00:00」の時刻が基準となり、日時演算が行われます。
具体例で確認する
以下の例を見ると、CURDATE()に時間単位のINTERVALを加算した際の挙動がよくわかります。
mysql> Select CURDATE() + INTERVAL 0 hour; +-----------------------------+ | curdate() + Interval 0 hour | +-----------------------------+ | 2017-10-28 00:00:00 | +-----------------------------+ 1 row in set (0.00 sec) mysql> select CURDATE() + INTERVAL 1 hour; +-----------------------------+ | curdate() + Interval 1 hour | +-----------------------------+ | 2017-10-28 01:00:00 | +-----------------------------+ 1 row in set (0.00 sec) mysql> Select CURDATE() + INTERVAL 2 hour; +-----------------------------+ | CURDATE() + INTERVAL 2 hour | +-----------------------------+ | 2017-10-28 02:00:00 | +-----------------------------+ 1 row in set (0.00 sec)
結果の解釈
上記の出力から、以下のことがわかります。
- INTERVAL 0 hour を加算した場合:結果は「2017-10-28 00:00:00」。CURDATE()の日付に、デフォルトの時刻「00:00:00」が付いた形で表示されます。
- INTERVAL 1 hour を加算した場合:結果は「2017-10-28 01:00:00」。基準となる「00:00:00」に1時間が加算されています。
- INTERVAL 2 hour を加算した場合:結果は「2017-10-28 02:00:00」。同様に、基準時刻から2時間進んだ値になります。
まとめ
CURDATE()は日付のみを返す関数ですが、時間単位のINTERVALと組み合わせた場合、MySQLは自動的に時刻部分を「00:00:00」とみなして計算を行います。つまり、曖昧さはなく、当日の午前0時を起点とした日時演算として処理されるのです。この仕様を理解しておくことで、日付・時刻を扱うSQLクエリをより正確に記述できるようになります。
-
MySQLでWITH ROLLUPを正しく使う方法!GROUP BYと組み合わせた集計テクニックを解説
WITH ROLLUPとは?MySQLのWITH ROLLUPは、GROUP BY句と組み合わせて使用することで、グループごとの集計結果に加えて、全体の合計(総計)行を自動的に追加してくれる便利な機能です。レポート作成やデータ分析の際に、別途合計用のクエリを実行する必要がなくなるため、非常に効率的です。基本構文WITH ROLLUPを使用する際の基本的な構文は以下の通りです。select yourColumnName1,sum(yourColumnName2) from yourTableNamegroup by yourColumnName1 with rollup;サンプルテーブルの作成ま
-
MySQLでCURDATE()とLIKE句を使った部分一致検索の方法
MySQLにはCONTAINS()という名前の関数は存在しません。そのため、現在の日付(CURDATE())に関連する文字列で部分一致検索を行いたい場合は、CONCAT()関数とLIKE句を組み合わせる方法が有効です。本記事では、実際にサンプルテーブルを作成しながら、その手順を順番に解説していきます。現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。mysql> select curdate();実行結果は以下の通りです。+------------+ | curdate() | +------------+ | 2019-11-28 | +----