在 Postgres 中获取本周星期一的日期?

Get this week's monday's date in Postgres?

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

例如,今天是 01/16/15(星期五)。这周的星期一日期是 01/12/15。

SELECT current_date + cast(abs(extract(dow FROM current_date) - 7) + 1 AS int);

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

大致思路是获取当前星期几,dow,减去 7,然后取 abs,得到到本周末的天数,然后加 1 , 到星期一。这给你下周一。

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

SELECT current_date - ((6 + cast(extract(dow FROM current_date) AS int)) % 7)

即,从今天的日期(过去星期一的天数)中减去当前星期几并加一,得到星期一。

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

  • 简单。初级开发人员只需很少的培训即可正确查询。
  • 显而易见。正确的查询显然正确。

假设"this week's Monday"表示今天之前的星期一,除非今天是星期一那么。 . .

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

如果 "today" 是星期一,它将 return 今天的日期。

其他周一:

下周一:

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

上周的星期一:

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

等:)