Произошел ли какой-то определенный DayOfMonth между датой и сегодняшним днем? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 2 столбца:

  1. DayOfMonth (это просто целое число от 1 до 31)
  2. Дата

Я пытаюсь написать оператор CASE, который возвращает true, если DayOfMonth произошел между датой и сегодняшней датой.

Например, если DayOfMonth = 18 и Date = '2020-04-14', оператор CASE вернет True, потому что 18 апреля произошло между сегодняшним днем ​​и 14 апреля.

Спасибо

1 Ответ

1 голос
/ 28 апреля 2020

Большинство баз данных поддерживают функцию 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...