我希望能够归还具有注册日期+ 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,...
答案 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年和临近年末的日期也可以很好地工作。