Как округлить дату в PostgreSQL до даты окончания предыдущего месяца или следующего месяца? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть столбец типа даты с именем «raw_date». Мне нужно извлечь еще один столбец даты из него с логами c, являющимися-

1) Если день в «raw_date» находится в диапазоне от 1 до 14, тогда производная дата должна быть последней датой предыдущего месяца (поэтому, если предыдущий месяц в (1,3,5,7,8,10,12), последняя дата будет 31, если в предыдущем месяце (4,6,9,11) последняя дата будет 30; если предшествующий месяц находится в (2) и год является високосным, последняя дата будет 29, а если это не високосный год, то это будет 28

2) Кроме того, мне необходимо учитывать изменения в году. Предположим, если «raw_date» = «2020-01-12», производная дата будет «2019-12-31»

Я пытаюсь использовать оператор «case» и предоставляю явные даты прошлого месяца, но есть многие сценарии ios, поэтому не могут охватить весь сценарий ios, требуемый согласно логам c. Может ли быть код, который охватывает все сценарии ios, включая високосный год и изменения года, если в январе дата составляет от 1 до 14.

1 Ответ

1 голос
/ 01 мая 2020

Вы можете использовать выражение case:

(case when extract(day from raw_date) <= 14
      then date_trunc('month', raw_date) - interval '1 day'
      else date_trunc('month', raw_date) + interval '1 month' - interval '1 day'
 end)

Здесь - это db <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...