我必须根据颜色条件得到date_closed。
- >如果颜色代码为绿色,则关闭日期应显示在时间戳
中- >如果颜色代码不是绿色,则日期关闭应为空。
为此,我写了以下查询:
(CASE
WHEN A.C_STATUS = 'RD' THEN 'NULL'
ELSE (CASE WHEN A.C_STATUS = 'GR' THEN (F.T_TIMESTAMP) END)
END) AS DATE_CLOSED
这给了我一个错误,指出NULL不能在日期中。我的代码出了什么问题?
答案 0 :(得分:5)
在单词' NULL'周围加上引号表示您正在尝试插入一个字符串,该字符串恰好包含一个您知道应该表示NULL的单词。你实际要做的就是说它没有引号,然后SQL Server将识别为NULL而不是"其中包含字母的字符串"
(CASE
WHEN A.C_STATUS = 'RD' THEN NULL
ELSE (CASE WHEN A.C_STATUS = 'GR' THEN (F.T_TIMESTAMP) END)
END) AS DATE_CLOSED
作为一个有趣的事实,如果您放弃ELSE语句,任何不适合您CASE的内容都将自动返回NULL。阅读您的要求,实际上看起来您的代码过于复杂:我相信以下内容会返回相同的结果。
CASE WHEN A.C_STATUS = 'GR' THEN F.T_TIMESTAMP END AS DATE_CLOSED
答案 1 :(得分:0)
您也可以将您的案例陈述写为
(
CASE
WHEN A.C_STATUS = 'RD' THEN NULL
WHEN A.C_STATUS = 'GR' THEN (F.T_TIMESTAMP)
ELSE
END
)AS DATE_CLOSED
注意:这是SQL语句。不确定Oracle,但它应该是相同的。