Teradata SQL WHERE子句报错求助:基于CURRENT_DATE的条件逻辑问题
问题排查与修正
核心错误原因
你这段WHERE子句里的CASE表达式写法不符合Teradata的语法规则:CASE表达式的THEN/ELSE分支必须返回具体值(如数字、字符串),不能直接返回tpd."RELATIVE_GLOBAL_DAY" = -1这类布尔判断语句,数据库无法解析这种返回条件的逻辑,因此报错。
简化修正方案
你的需求是:周一的时候筛选RELATIVE_GLOBAL_DAY = -3,其他日期筛选RELATIVE_GLOBAL_DAY = -1。完全可以去掉多余的星期字符串转换,直接用TD_Day_of_Week返回的数字判断,代码更简洁高效:
AND tpd."RELATIVE_GLOBAL_DAY" = CASE TD_Day_of_Week(CURRENT_DATE) WHEN 1 THEN -3 -- TD_Day_of_Week返回1代表周一 ELSE -1 -- 其余所有日期取-1 END
保留星期字符串判断的兼容方案
如果后续需要基于星期字符串做扩展判断,也可以调整CASE逻辑,让分支返回统一类型的标识值,再和目标条件的标识值对比:
AND CASE WHEN (CASE TD_Day_of_Week(CURRENT_DATE) WHEN 1 THEN 'MON' WHEN 2 THEN 'TUE' WHEN 3 THEN 'WED' WHEN 4 THEN 'THU' WHEN 5 THEN 'FRI' WHEN 6 THEN 'SAT' WHEN 7 THEN 'SUN' ELSE 'Unknown' END) <> 'MON' THEN 1 ELSE 0 END = CASE WHEN tpd."RELATIVE_GLOBAL_DAY" = -1 THEN 1 ELSE 0 END
内容的提问来源于stack exchange,提问作者Virendra
相关产品推荐
相关产品推荐

