有两个日期 - ' 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'))
但不确定如何纳入减法。它们之间的日期和日期会发生变化。
答案 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