ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PostgreSQL date型のカラムとの比較で考えた点

PostgreSQLのdate型のカラムの値に対して、現在の日付が「同じまたは後」なのか判定が必要になりました。

SELECT now();

とすればわかりますが、日付と時刻が一緒に取得できます。

単純に

SELECT id FROM date_table WHERE data_cloum >= now();

にすると、data_cloumが'2019-05-18'でnow()が'2019-05-17 18:05:00'の場合は、data_cloumの方が大きいと判断されます。
data_cloumが'2019-05-17'でnow()が'2019-05-17 18:05:00'の場合は、now()の方が大きいと判断され、望んだ結果にはなりません。

now()をフォーマットする

now()の値に時刻部分があるために望んだ結果にならないので、

SELECT id FROM date_table WHERE data_cloum >= to_char(now(), 'yyyy-mm-dd');

として、日付のみにフォーマットすれば望んだとおりの結果が得られます。

ノートパソコンのディスプレイを指さしている
unsplash-logoJohn Schnobrich

current_dateを使う

now()は日付と時刻なので、日付だけはないのかと確認したら、current_dateがありました。
www.postgresql.jp
current_dateを使えば、

SELECT id FROM date_table WHERE data_cloum >= current_date;

となって、フォーマットも不要になり、現在日付を比較に使っているというのがわかりやすいです。