概要
SQL文で日付指定する時、以下にはどのような違いがあるでしょうか?
DATE(create_date) BETWEEN '2024-10-01' AND '2024-10-31'
create_date BETWEEN '2024-10-01' AND '2024-10-31'
DATE
関数を使用して正しく指定する
DATE
関数を使用していない前者の場合、実は「10月31日」は取得されません。
DATE
関数を使用すると「10月31日」の分まで取得されます。
なぜかというと、DATE(create_date)
は、create_date
の日時部分を切り捨てて日付部分だけを取得するためです。
MySQLドキュメントにも以下のように記載されていますね。
mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'
対して、DATE
関数を使用しない場合は、時間部分も含めて比較されます。
BETWEEN '2024-10-01' AND '2024-10-31'
は、2024-10-01 00:00:00
から2024-10-31 00:00:00
までの範囲を意味します。したがって、10月31日の分は取得されない、というわけです。
ちょっとしたところで大きなミスになりかねないので要注意ですね。
参考