如何使用 postgres 获取日期

how to get dates with postgres

我试图查询 return 过去 4 周内所有记录的总和。 我让它工作但是我在使用时间戳时。我正在尝试更改精度并仅使用日期。

简单地说,我只想要日期范围而不是时间戳范围。

这是我的时间戳。

with date_ranges (range_name, range_dates) as
              ( values ('week_0', tstzrange ((now()-interval '6 days'),  now(),'[]'))
                      , ('week_1', tstzrange ((now()-interval '13 days'), (now()-interval '7 days'), '[]'))
                      , ('week_2', tstzrange ((now()-interval '20 days'), (now()-interval '14 days'),'[]'))
                      , ('week_3', tstzrange ((now()-interval '27 days'), (now()-interval '21 days'),'[]')) 
              ) 
  select range_name, range_dates, sum("transactionTotal") total_amount 
  from "MoneyTransactions" mt
  join date_ranges dr on (mt."createdAt" <@ range_dates)
  group by range_name, range_dates
  order by range_name;

我尝试将 tstzrange 更改为 daterange,但出现以下错误

function daterange(timestamp with time zone, timestamp with time zone, unknown) does not exist

我对 SQL 没有那么多背景知识,因此非常感谢您提供一个简短的解释。

您只需投射到日期。但是,这样做时要小心。您应该使用 7 的倍数以及 exclusive(默认上限)。因此它看起来像:

with date_ranges (range_name, range_dates) as
              ( values ('week_0', tstzrange ((now()::date-interval '7 days'),  now()::date))
                      , ('week_1', tstzrange ((now()::date-interval '14 days'), (now()::date-interval '7 days')))
                      , ('week_2', tstzrange ((now()::date-interval '21 days'), (now()::date-interval '14 days')))
                      , ('week_3', tstzrange ((now()::date-interval '28 days'), (now()::date-interval '21 days')))
              )
          select range_name, range_dates, sum("transactionTotal") total_amount 
  from "MoneyTransactions" mt
  join date_ranges dr on (mt."createdAt" <@ range_dates)
  group by range_name, range_dates
  order by range_name;