Большинство баз данных поддерживают функцию day()
для возврата даты месяца.
where (DayOfMonth >= day('2020-04-14') and
DayOfMonth <= day(current_date)
) or
'2020-04-14' <= datedd(month, -1, current_date)
В некоторых базах данных day()
обозначается extract(day from <date>)
. У некоторых есть альтернативные способы написания current_date
.
РЕДАКТИРОВАТЬ:
Это сложнее, чем я думал, потому что день месяца может быть 31 - но месяц может не иметь 31 дней. Следующее не обрабатывает дескриптор февраля, но дает идею:
where -- first the trivial case
(dayOfMonth <= day(current_date) and
(@date <= date_trunc('month', current_date) or
dayOfMonth >= day(@date)
)
) or
-- then the previous month case
(date_trunc('month', @date) = date_trunc('month', current_date) - interval '1 month' and
dayOfMonth >= day(@date) and
dayOfMonth <= day(last_date(@date))
) or
-- Days at the end of month but not necessarily in the previous month.
@date < date_trunc('month', current_date) - interval '1 month'