我有 2 个日期字段,想写一个条件 如果 date2 字段距 date1 字段 > 45 个日历天,想要查看结果
我尝试了 dateadd
并提取但没有得到我想要的结果。你能帮我吗。
Date1 Date2
2020-01-02 2020-04-01
2020-02-01 2020-03-09
2021-01-04 2021-04-09
想查看日期 2 是否距日期 1 超过 45 个日历天
答案 0 :(得分:0)
您可以使用:
WHERE date1 + INTERVAL '45 day' < date2;
非 SARGable 版本:
WHERE DATEDIFF(day, date1, date2) > 45;
答案 1 :(得分:0)
SELECT date1,
date2,
datediff('days', date1, date2) as diff,
abs(diff)>45 as filter
FROM (VALUES
('2020-01-02'::date, '2020-04-01'::date),
('2020-02-01'::date, '2020-03-09'::date),
('2021-01-04'::date, '2021-04-09'::date)
v(date1, date2)
)
--WHERE filter
;
给出:
DATE1 DATE2 DIFF FILTER
2020-01-02 2020-04-01 90 TRUE
2020-02-01 2020-03-09 37 FALSE
2021-01-04 2021-04-09 95 TRUE
因此,如果您在过滤器中使用此逻辑,您会期望只获得两行,这就是会发生的情况。
SELECT date1,
date2
FROM (VALUES
('2020-01-02'::date, '2020-04-01'::date),
('2020-02-01'::date, '2020-03-09'::date),
('2021-01-04'::date, '2021-04-09'::date)
v(date1, date2)
)
WHERE abs(datediff('days', date1, date2)) > 45
;
给出:
DATE1 DATE2
2020-01-02 2020-04-01
2021-01-04 2021-04-09
现在我使用了 ABS,因为差异可能在以太方向,如果您只想要 date1 之后 date2 大于 45 的行,那么可以删除 ABS。