【问题标题】:ERROR: Datatype Mismatch in THEN/ELSE expression错误:THEN/ELSE 表达式中的数据类型不匹配
【发布时间】:2022-01-26 04:06:19
【问题描述】:

出现错误:“THEN/ELSE 表达式中的数据类型不匹配”

从下面的代码:MAX(CASE WHEN CustRank = 1 THEN StopDt ELSE 0 END) AS StopDt1

这里的 StopDt 是 MM/DD/YYYY 格式。请帮助如何解决问题。

【问题讨论】:

  • 0 不是有效日期,只需删除 ELSE 即可获得最大日期或 NULL。

标签: teradata teradatasql


【解决方案1】:

取决于 StopDt 的数据类型;我假设它是日期。如果是这样,ELSE 部分也必须是日期。零 (0) 不是有效日期。你可以使用

MAX(CASE WHEN CustRank = 1 THEN StopDt ELSE CAST(NULL as DATE) END) 

MAX 将忽略 NULL 值(即 CustRank1 的情况),但如果没有 CustRank=1 的记录,它将返回 NULL。我认为这是可以接受的

如果您真的想在这些情况下显示零,则需要将整个表达式转换为字符串 (varchar),然后使用 COALESCE(或类似方法)将 NULL 值替换为“0”。

【讨论】:

  • 不需要ELSE,默认为NULL。
  • 谢谢dnoeth,我认为明确表示不会有什么坏处。
猜你喜欢
  • 2017-05-15
  • 2021-03-25
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多