Вы должны быть очень осторожны при работе с date
s в базах данных и, в частности, в Oracle. Oracle имеет компонент времени как часть типа данных date
. По этой причине вам следует избегать between
.
Вместо этого напишите логику как:
select i.*
from Invoice i
where i.post_date >= trunc(sysdate, 'MON') and
i.post_date < add_months(trunc(sysdate, 'MON'), 1);
Эта логика работает независимо от того, имеет ли post_date
компонент времени или нет, поэтому он безопаснее.