Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中获取周开始和结束日期字符串?_Sql_Postgresql_Timestamp - Fatal编程技术网

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

如何在PostgreSQL中获取周开始和结束日期字符串?,sql,postgresql,timestamp,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\u time的数据类型是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\u time
的数据类型是
timestamp

我需要找到一周的时间间隔(从开始到结束) 和总和(结果)为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) 
提取功能只能获取今年的周数,如何获取一周的开始时间到结束时间?

您可以使用

例如:

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',…)+'6days'::interval
,则可能需要添加一整周,并对周末使用严格的比较

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

日期('week',x)::日期 请参阅SQLFIDLE上的概念验证:

它是

select to_date('2015-07', 'IYYY-IW');
在postgres中使用它

它会回来的

2015-02-09

这有助于查询当前一周的所有天数

select cast(date_trunc('week', current_date) as date) + i
from generate_series(0,6) i
2015-08-17
2015-08-18
2015-08-19
2015-08-20
2015-08-21

要获取一周的开始和结束日期(周一为0,周五为4):

2015-08-17-->2015-08-21


这假设周从星期一开始。有没有办法做同样的事情,但是周从星期天开始?谢谢!对不起,我不经常使用。向上投票!:D
select to_date('2015-07', 'IYYY-IW');
2015-02-09
select cast(date_trunc('week', current_date) as date) + i
from generate_series(0,6) i
select cast(date_trunc('week', current_date) as date) + 0 || '-->' ||  cast(date_trunc('week', current_date) as date) + 4;