如何使用 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;
我试图查询 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;