微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在postgresql中获取星期开始和结束日期字符串




我使用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的数据类型是时间戳,

现在我需要找一个星期的时间间隔(从头到尾)
和sum(result)为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)

提取功能只能得到今年的周数,我该如何获得开始时间
一周结束时间?

多谢!

你可以使用 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天’:: 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’1 day’:: interval):: date – ‘1 day’:: interval应该可以替换date_trunc(‘week’,x):: date.

原文地址:https://www.jb51.cc/postgresql/192708.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐