Как найти последний «рабочий» день прошлого месяца? - PullRequest
0 голосов
/ 27 июня 2018

Есть ли способ найти последний рабочий день прошлого месяца? Я знаю, что могу получить последний день прошлого месяца с SELECT (date_trunc('month', now())::date - 1), но как мне получить последний "будний день"?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Отвлекаясь от ответа Гордона, я думаю, это то, что вы хотите:

SELECT (
    date_trunc('month', current_date) - interval '1 day' -
    (case extract(dow from date_trunc('month', current_date) - interval '1 day')
         when 0 then 2
         when 6 then 1
         else 0
      end) * interval '1 day'
)::date as last_weekday_in_last_month;

Предположим, ваши выходные - 0 (воскресенье) и 6 (суббота). Он использует оригинальную логику OP, чтобы найти последнюю дату последнего месяца, а затем логику Гордона CASE, чтобы вычесть больше дней, если последняя дата равна 0 или 6.

0 голосов
/ 27 июня 2018

Я считаю, что это то, что вы хотите:

select (date_trunc('month', current_date) + interval '1 month' -
        (case extract(dow from date_trunc('month', current_date) + interval '1 month')
              when 0 then 2
              when 1 then 3
              else 1
         end) * interval '1 day'
       ) as last_weekday_in_month

Такие запросы часто предполагают необходимость таблицы календаря.

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