如何使用postgres获取日期 [英] how to get dates with postgres

查看:68
本文介绍了如何使用postgres获取日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I was trying to query and return the sum of all records in the last 4 past weeks. I had it working however I while using timestamps. and I am trying to change the precision and and just use dates.

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

briefly instead of timestamp ranges I want just date ranges.

这是我对时间戳的看法.

this what I had with timestamps.

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;

我尝试用 daterange 更改 tstzrange 但我收到以下错误

I tried changing tstzrange with daterange but I get the following error

函数日期范围(带时区的时间戳,带时区的时间戳,未知)不存在

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

我对 SQL 没有太多背景,因此非常感谢您的简单解释.

I don't have that much background with SQL so an small explanation is much appreciated.

推荐答案

您只需将日期转换为日期即可.但是,这样做时要小心.您应该沿独占(默认上限)使用 7 的倍数.因此它看起来像:

You would simply cast to date. However, be careful when you do that. You should use multiples of 7 along exclusive (default upper bounds). Thus it looks like:

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;

这篇关于如何使用postgres获取日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆