日付betweenの落とし穴
betweenは使いやすいものの、日付で取り扱う時には注意が必要です。
timestamp型で取り扱う場合で、
between {from} and {to}
で、toの部分を日付にすると、その日の0時0分0秒までしか対象になりません。
例)
select *
from (
select to_date('2019-02-14 23:00:00','YYYY-MM-DD hh24:mi:ss') as dat from dual
union
select to_date('2019-02-15 00:00:00','YYYY-MM-DD hh24:mi:ss') as dat from dual
union
select to_date('2019-02-15 10:00:00','YYYY-MM-DD hh24:mi:ss') as dat from dual
)
where dat between date '2019-02-01' and date '2019-02-15'
結果
2019-02-14 23:00:00.0
2019-02-15 00:00:00.0
3つめの2/15 10時のものが出てきません。
これが地味な落とし穴になるので、若干面倒ですが、
where dat >= date '2019-02-01'
and dat < date '2019-02-15' + 1
として、1日後「未満」としています。
コメント