如何在Snowflake中筛选近7天数据?解决YYYYMMDD日期转换报错
问题解决思路
你遇到的报错根源是CASE条件逻辑错误,且未覆盖所有异常值(比如空格字符串):
- 原CASE里用了
AND,但一个字段不可能同时是空字符串、NULL、'NULL'字符串,必须换成OR才能匹配任一异常情况 - 报错提示的
' '是空格组成的字符串,原代码没处理这种情况,导致TO_DATE解析无效值失败
正确代码实现
先处理所有异常值,并且直接用日期类型做比较(比字符串比较更高效):
WITH CTE AS ( SELECT CASE WHEN DATECOL IS NULL OR TRIM(DATECOL) = '' OR UPPER(DATECOL) = 'NULL' THEN DATE('3000-01-01') ELSE TO_DATE(DATECOL, 'YYYYMMDD') END AS DATECOL_FINAL FROM TABLE ) SELECT * FROM CTE WHERE DATECOL_FINAL > CURRENT_DATE() - INTERVAL '7 days';
更高效的写法(可选)
如果业务允许,直接在主查询里先过滤无效数据,再做日期转换,能减少不必要的计算量:
SELECT * FROM TABLE WHERE DATECOL IS NOT NULL AND TRIM(DATECOL) != '' AND UPPER(DATECOL) != 'NULL' AND TO_DATE(DATECOL, 'YYYYMMDD') > CURRENT_DATE() - INTERVAL '7 days';
内容的提问来源于stack exchange,提问作者Shruti
相关产品推荐
相关产品推荐

