Postgres使用date_part扩展时间窗口

时间:2018-06-08 09:18:58

标签: postgresql

有两个日期 - ' 2018-05-01' ' 2018-06-01'。我想把这个窗口扩展到那些日期的过去的日差。

 SELECT * FROM data
 WHERE 
 start_time > CAST('2018-05-01' AS timestamptz) - INTERVAL '30 DAY'   
 AND start_time < CAST('2018-06-01' AS timestamptz)

如何更换INTERVAL&#39; 30 DAY&#39;在没有明确定义天数的情况下,给定日期之间的天数?我知道计算日差:

date_part('day',age('2018-05-01', '2018-06-01'))

但不确定如何纳入减法。它们之间的日期和日期会发生变化。

2 个答案:

答案 0 :(得分:0)

您可以使用date_trunc('mon', some_date_expression) 向下舍入到一个月的开头:

select date_trunc('mon', now() - '3 mon'::interval) as date_begin
        , date_trunc('mon', now() - '1 day'::interval) as date_end
        ;

结果

       date_begin       |        date_end        
------------------------+------------------------
 2018-03-01 00:00:00+01 | 2018-06-01 00:00:00+02
(1 row)

答案 1 :(得分:0)

您可以简单地从开始日期中减去差异:

with t (start_date, end_date) as (
  values (date '2018-05-01', date '2018-06-01')
)
select start_date - (end_date - start_date) as new_start, 
       end_date
from t;

返回

new_start  | new_end   
-----------+-----------
2018-03-31 | 2018-06-01