雪花:计算日历天数

时间:2021-04-28 18:15:49

标签: sql snowflake-cloud-data-platform

我有 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 个日历天

2 个答案:

答案 0 :(得分:0)

您可以使用:

WHERE date1 + INTERVAL '45 day' < date2;

非 SARGable 版本:

WHERE DATEDIFF(day, date1, date2) > 45;

db<>fiddle demo

答案 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。