3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python(Django) x AWS 一人アドベントカレンダーAdvent Calendar 2024

Day 1

【MySQL】create_date BETWEEN と DATE(create_date) BETWEENの違いは?

Posted at

概要

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日の分は取得されない、というわけです。

ちょっとしたところで大きなミスになりかねないので要注意ですね。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?