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

前端之家收集整理的这篇文章主要介绍了如何在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(结果)为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):: date替换为date_trunc(‘week’,x’1 day’:: interval):: date – ‘1 day’:: interval应该有效。

猜你在找的Postgre SQL相关文章