2015-01-16 2 views

ответ

9
SELECT current_date + cast(abs(extract(dow from current_date) - 7) + 1 as int); 

работает, хотя могут быть более элегантные способы сделать это.

Общая идея - получить текущий день недели, dow, вычесть 7, и взять абс, который даст вам количество дней до конца недели и добавит 1, чтобы добраться до понедельника , Это даст вам следующий понедельник.

EDIT: после совершенно неправильно вопрос, чтобы получить до понедельника, намного проще:

SELECT current_date - cast(extract(dow from current_date) as int) + 1; 

т.е. вычесть текущий день недели с сегодняшнего дня (количество пути дня в понедельник) и добавьте один, чтобы вернуться в понедельник.

+0

Это дает мне наступающую дату понедельника. Как я могу получить последнюю дату в понедельник? – Dezzie

3

Обычно я использую calendar table. Есть два основных преимущества.

  • Простой. Младшие разработчики могут запросить его правильно с небольшой подготовкой.
  • Очевидно. Правильные запросы: очевидно правильный.

Предполагая, что «понедельник недели» означает понедельник до сегодняшнего дня, если сегодня не понедельник. , ,

select max(cal_date) as previous_monday 
from calendar 
where day_of_week = 'Mon' 
    and cal_date <= current_date; 
Смежные вопросы