SQL如何使用CASE WHEN查询

时间:2014-10-28 16:35:44

标签: sql oracle

我必须根据颜色条件得到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不能在日期中。我的代码出了什么问题?

2 个答案:

答案 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,但它应该是相同的。