在Postgres获得本周的星期一约会?

时间:2015-01-16 17:45:46

标签: postgresql

如何在PostgreSQL中获得本周的星期一日期?

例如,今天是2015年1月16日(星期五)。本周的星期一日期是2015年12月1日。

4 个答案:

答案 0 :(得分:34)

您可以使用date_trunc()

select date_trunc('week', current_date);

手册中的更多细节:
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

如果“今天”是星期一,它将返回今天的日期。

答案 1 :(得分:15)

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

有效,尽管可能有更优雅的方式。

一般的想法是获取当周的当前日期dow,减去7,然后选择abs,它将为您提供截至本周末的天数,并添加1,到星期一。这将在下周一给你。

编辑:完全误读了问题,获得前一个星期一,简单得多:

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

即,从今天的日期(星期一的路径数量)中减去当天的当天,并添加一个,以便回到星期一。

答案 2 :(得分:4)

我通常使用calendar table。有两个主要优点。

  • 简单。初级开发人员可以通过很少的培训正确地查询它。
  • 显而易见的。正确的查询显然正确。

假设“本周的星期一”是指今天的星期一,除非今天是星期一。 。

select max(cal_date) as previous_monday
from calendar
where day_of_week = 'Mon' 
  and cal_date <= current_date;

答案 3 :(得分:0)

以及其他星期一:

下周一:

date_trunc('week', now())+ INTERVAL '7days'

上周的星期一:

date_trunc('week', now())- INTERVAL '7days'

等:)