D + 14天或D-14天(基于列的值)

时间:2018-10-05 09:24:27

标签: postgresql

我希望能够归还具有注册日期+ 14天的汽车并每年这样做。

我们尝试过:

select *
from cars
where date(date_part('year', current_date)||'-'||date_part('month', 
registrationdate)||'-'||date_part('day', registrationdate)) = 
current_date + interval '14 days';

但是我们遇到了跨年问题,例如,如果我的注册日期为2018年12月20日,那么它将无法正常工作。

有更好的解决方案吗?

例如,我在数据中得到了这个信息:

id | registrationdate
1 | 2017-12-20
2 | 2018-01-15

,并且我希望能够通过sql请求每年返回注册日期+ 14天。 对于我们的示例,当我在2018年1月3日,2019年1月3日,2020年1月3日启动请求时,它需要返回第一行,而当我在2018年1月29日启动请求时,它返回第二行。 ,2019-01-29、2020-01-29,...

1 个答案:

答案 0 :(得分:0)

如果可以帮助某人,我会给您解决方案:

select * 
from (
 select *, 
   (extract(year from age(registrationdate)) + 1) * interval '1 year' + interval '14 days' + registrationdate "next_rd_day"
  from cars
) as cars_with_upcoming_registration_date
where
extract(month from age(current_date, next_rd_day))=0 and extract(day from 
age(current_date, next_rd_day))=0

它将根据所需的时间间隔创建一个新的列,并在下次出现时在此条件下进行,您只需要测试月份和日期是否相同即可。 同样,with年和临近年末的日期也可以很好地工作。