Postgres расширяет временное окно, используя date_part - PullRequest
0 голосов
/ 08 июня 2018

Есть две даты - «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)

Как я могу заменить ИНТЕРВАЛ «30 ДНЕЙ» числом дней между указанными датами без явного определения количества дней?Я знаю, чтобы рассчитать разницу в днях:

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

Но не знаю, как включить в вычитание.Даты и дни между ними будут меняться.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете просто вычесть разницу из даты начала:

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
0 голосов
/ 08 июня 2018

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...