雪花:计算日历天数
Posted
技术标签:
【中文标题】雪花:计算日历天数【英文标题】:Snowflake : Calculate number of calendar days 【发布时间】:2021-04-28 18:15:49 【问题描述】:我有 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
想看看 Date2 是否距离 date1 >45 个日历日
【问题讨论】:
请提供样本数据和所需的输出 【参考方案1】: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。
【讨论】:
谢谢。这是有效的。我为我的逻辑删除了 ABS。 @deeps 不客气,记得点击答案旁边的勾号来解决你的问题。【参考方案2】:你可以使用:
WHERE date1 + INTERVAL '45 day' < date2;
非 SARGable 版本:
WHERE DATEDIFF(day, date1, date2) > 45;
db<>fiddle demo
【讨论】:
这不是重新调整超过 45 个日历日的记录 @deeps 我添加了一个例子以上是关于雪花:计算日历天数的主要内容,如果未能解决你的问题,请参考以下文章