Как я могу получить предыдущий день недели в PostgreSQL?

#sql #postgresql #weekday

#sql #postgresql #день недели

Вопрос:

Я новичок в SQL, и мне просто интересно, как получить предыдущий день недели в PostgreSQL. У меня есть select (current_date — 1), чтобы получить вчерашнюю дату, но мне это нужно, чтобы исключить выходные. Так, например, если сегодня понедельник, я бы ожидал, что этот запрос получит дату пятницы.

Ответ №1:

Это не модно, но это то, что я использую:

 select case extract('dow' from current_date) 
         when 0 then current_date - 2 
         when 1 then current_date - 3 
         else current_date - 1 
       end;

┌────────────┐
│    case    │
├────────────┤
│ 2020-09-21 │
└────────────┘
(1 row)

  

Ответ №2:

Вы можете использовать TO_CHAR() функцию с сокращением дня в условном операторе :

 SELECT CASE WHEN TO_CHAR(current_date-1, 'dy') = 'sun' THEN
                 current_date-3
            WHEN TO_CHAR(current_date-1, 'dy') = 'sat' THEN
                 current_date-2
            ELSE
                 current_date-1
             END
  FROM tab