如何 Select 在两个特定日期范围之间

How to Select Between Two Specific Date Ranges

假设我想要一个特定的时间间隔,例如 (mm/dd/yyyy-1 - 1/1/yyyy-1)

我如何在 postgres 中查询这个?

到目前为止,我已经解决了一些问题:

SELECT * 
FROM my_table 
WHERE date BETWEEN (now()::DATE - INTERVAL '1 year') - ‘1/1/?’ AND (now() - INTERVAL '1 year') - ‘1/1/?’

我不太清楚如何获得前一年。

我走在正确的轨道上吗?对不起,我是新来的。谢谢!

您可以使用 date_trunc() 获取年初:

select *
from my_table
where date >= date_trunc('year', current_date - interval '1 year')
  and date  < date_trunc('year', current_date)

date_trunc('year', current_date)returns年的第一天。由于我使用 < 作为上限,这将包括前一年 12 月 31 日之前的所有日期。

如果您确实想使用 BETWEEN(只有当 date 定义为 date 数据类型时才能正常工作),那么您可以使用:

select *
from my_table
where date between date_trunc('year', current_date - interval '1 year')::date
               and date_trunc('year', current_date)::date - 1

注意上限被投成date然后我减去1天在12月31日登陆。这是必要的因为between包括 两个值。

如果你愿意,你可以使用这样的东西:

select * from table 
 where data between to_date(concat('01/01/', EXTRACT (YEAR FROM now()) - 1), 'mm/dd/yyyy') and (now()::DATE - interval '1 year')

不过用的比较多的是date_trunc:

select * from table
where date >= date_trunc('year', now()::DATE - interval '1 year')
  and date  < date_trunc('year', now()::DATE)

当您使用 date_trunc('year', now()::DATE) 时,日期将为 01,月份为 01,年份将为今年。