如何在PostgreSQL中获取周开始和结束日期字符串?
发布时间:2020-12-13 16:35:18 所属栏目:百科 来源:网络整理
导读:我正在使用PostgreSQL 8.3。我有这样一张桌子: id regist_time result-----------------------------------1 2012-07-09 15:00:08 32 2012-07-25 22:24:22 74 2012-07-07 22:24:22 8 regist_time的数据类型是时间戳。 我需要找一周的时间间隔(从头到尾) 和s
我正在使用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的数据类型是时间戳。 我需要找一周的时间间隔(从头到尾) 我想得到的结果如下: 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应该有效。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |