You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:50:20