Snowflake中DATEDIFF(week)函数计算结果为何存在差异?
Snowflake DATEDIFF(week) 计算差异原因解析
Snowflake的DATEDIFF(week, start, end)函数核心逻辑不是按“7天为一周”的整数倍计算,而是统计从起始时间到结束时间之间跨越的周起始边界数量(默认周起始日为周日,可通过会话参数WEEK_START修改)。
针对你的两个示例分析:
第一个查询
select datediff(week,'2022-09-05T23:39:20.123-07:00', '2022-09-18T01:39:20.123-07:00');起始时间为当地周一,结束时间为当地周日,期间仅跨越1次周起始边界(9月11日周日),因此返回结果为1。
第二个查询
select datediff(week,'2022-09-07T23:39:20.123-07:00', '2022-09-20T01:39:20.123-07:00');起始时间为当地周三,结束时间为当地周二,期间跨越了2次周起始边界(9月11日周日、9月18日周日),因此返回结果为2。
补充说明
如果需要按“每7天算一周”的逻辑计算,可改用DATEDIFF(day, start, end)/7并按需取整;也可通过修改WEEK_START参数(例如设为1,将周一作为周起始日)调整周边界的判定规则。
内容的提问来源于stack exchange,提问作者Ashok Khote
相关产品推荐
相关产品推荐

