Как я могу получить дату недели на этой неделе в PostgreSQL?Получите понедельнику понедельника в Постгресе?
Например, сегодня 01.01.16 (пятница). На этой неделе понедельник - 01/12/15.
Как я могу получить дату недели на этой неделе в PostgreSQL?Получите понедельнику понедельника в Постгресе?
Например, сегодня 01.01.16 (пятница). На этой неделе понедельник - 01/12/15.
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;
т.е. вычесть текущий день недели с сегодняшнего дня (количество пути дня в понедельник) и добавьте один, чтобы вернуться в понедельник.
Обычно я использую calendar table. Есть два основных преимущества.
Предполагая, что «понедельник недели» означает понедельник до сегодняшнего дня, если сегодня не понедельник. , ,
select max(cal_date) as previous_monday
from calendar
where day_of_week = 'Mon'
and cal_date <= current_date;
Вы можете использовать date_trunc()
для этого:
select date_trunc('week', current_date);
Более подробную информацию в руководстве:
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
Если "сегодня" в понедельник он будет возвращать текущую дату.
Это дает мне наступающую дату понедельника. Как я могу получить последнюю дату в понедельник? – Dezzie