在 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'
等:)
如何在 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'
等:)