Presto SQL如何判断指定日期是否早于指定年限?代码异常排查
SQL日期判断逻辑异常问题解决
存在的问题
- 语法错误:
CASE表达式缺少必须的闭合关键字END,非法语法导致数据库无法正确解析判断逻辑,所有行都会触发THEN分支返回结果。 - 逻辑写法缺陷:对原日期做加10年运算后再比对的方式,存在闰年、月末日期溢出的兼容风险,比如部分数据库处理
2020-02-29 + INTERVAL '10' YEAR时会返回2030-03-01,进而导致判断结果偏差。
正确实现方案
调整判断逻辑为用当前日期减去10年作为阈值,直接和原日期比对,同时补全语法:
SELECT CASE WHEN CAST(my_date AS DATE) < CURRENT_DATE - INTERVAL '10' YEAR THEN 'OVER 10 YEARS AGO' ELSE NULL END AS date_check -- 补充你的表名即可 FROM your_table;
逻辑说明
调整后的写法直接计算10年前的日期作为固定阈值,不需要对每一行的my_date做加法运算,执行效率更高,也避免了日期运算的兼容问题,完全符合需求:
- 日期早于10年前:返回
OVER 10 YEARS AGO - 日期在近10年内:返回
NULL
内容的提问来源于stack exchange,提问作者Ricardo Francois
相关产品推荐
相关产品推荐

