どういう仕組みかわからなかったので調べた
環境
$ mysql --version mysql Ver 14.14 Distrib 5.7.24, for osx10.14 (x86_64) using EditLine wrapper
マニュアル曰く
マニュアルには以下のようにある
DATE 値には時間情報が含まれないので、DATETIME または TIMESTAMP 値に変換すると、'00:00:00' の時間部分が追加されます。 - MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.7 日付と時間型間での変換
考慮すべきケース
Railsなどではおなじみ created_at
、こちら大体は datetime
の型で作成されるが、そこに対して 2019-08-17
以前のデータを取ろうとして以下のようなSQLを書く
SELECT * FROM users WHERE created_at <= "2019-08-17";
直感的には取れそうだが、下記と同義になるため、実際は意図と異なってしまう
SELECT * FROM users WHERE created_at <= "2019-08-17 00:00:00";