我使用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.