sql - 如何在 PostgreSQL 中获取周开始和结束日期字符串?

标签 sql postgresql timestamp

我正在使用 PostgreSQL 8.3。我有一个这样的表:

id        regist_time        result
-----------------------------------
1     2012-07-09 15:00:08      3
2     2012-07-25 22:24:22      7
4     2012-07-07 22:24:22      8

regist_time的数据类型是timestamp

我需要找到一个星期的时间间隔(从开始到结束) 和 sum(result) as num.

我想得到的结果是:

      week                    num    
---------------------------------
7/1/2012-7/7/2012              10
7/8/2012-7/14/2012              5
7/15/2012-7/21/2012             3
7/22/2012-7/28/2012            11

我可以得到今年的周数:

SELECT id,regis_time, EXTRACT(WEEK FROM regis_time) AS regweek
FROM tba

关键部分是

EXTRACT(WEEK FROM regis_time) 

extract函数只能获取这一年的周数,如何获取一周内的开始时间到结束时间?

最佳答案

您可以使用 date_trunc('week', ...) .

例如:

SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00

然后,如果您对开始时间不感兴趣,可以将其转换为日期。

也要获取结束日期:

SELECT    date_trunc('week', '2012-07-25 22:24:22'::timestamp)::date
   || ' '
   || (date_trunc('week', '2012-07-25 22:24:22'::timestamp)+ '6 days'::interval)::date;

-> 2012-07-23 2012-07-29

(我在这里使用了默认格式,您当然可以调整它以使用 MM/DD/YYYY。)

请注意,如果您想对时间戳进行比较,而不是使用 (date_trunc('week', ...) + '6 days'::interval,您可能需要添加整整一周,并在周末使用严格比较。

这将排除一周最后一天的 y 时间戳(因为截止时间是当天的午夜)。

    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date

这将包括他们:

    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)

(在极少数情况下,您不能直接在 y 上使用 date_trunc。)


如果您的一周从周日开始,将 date_trunc('week', x)::date 替换为 date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval 应该有效。

关于sql - 如何在 PostgreSQL 中获取周开始和结束日期字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761938/

相关文章:

mysql - 在 MySQL 中选择相关行

SQL,如何使用每个日期列表作为过程的参数来循环?

hibernate - org.hibernate.type.TextType 和 Oracle

ruby-on-rails - Rails uniq 公共(public)事件

datetime - 在观察夏令时的同时解析本地时间(到 UTC)的有序时间戳

MySQL SELECT 列,其中两列都是唯一的

sql - 反转 'With Recursive' 语句

postgresql - 带有密码盐的 Pure-ftpd 和 Postgreql Auth

unix - 将unix时间戳转换为mysql中人类可读的时间

javascript - Python 与 Javascript 日期时间