SQL如何使用CASE WHEN查询

Dev*_* CM -1 sql oracle

我必须根据颜色条件得到date_closed.

- >如果颜色代码为绿色,则关闭日期应显示在时间戳中

- >如果颜色代码不是绿色,则日期关闭应为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
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,指出NULL不能在日期中.我的代码出了什么问题?

AHi*_*ins 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
Run Code Online (Sandbox Code Playgroud)

作为一个有趣的事实,如果你放弃ELSE语句,任何不适合你的CASE的东西都会自动返回NULL.阅读您的要求,实际上看起来您的代码过于复杂:我相信以下内容会返回相同的结果.

 CASE WHEN A.C_STATUS = 'GR' THEN F.T_TIMESTAMP END AS DATE_CLOSED
Run Code Online (Sandbox Code Playgroud)