更改CASE语句以处理NULL值?

时间:2012-11-03 20:11:32

标签: sql-server tsql case

我需要帮助修改现有的case语句,该语句必须被更改以适应null值的可能性。

目前,声明如下:

CASE WHEN 
  DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN 
   DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
  ELSE NULL END 
AS Days_Past_Due

我只想更改现有的CASE语句,以便能够处理null table.OpenDate字段,返回NULL作为Days_Past_Due。有一个简单的方法吗?

感谢!!!

3 个答案:

答案 0 :(得分:4)

不要让你的表达更多复杂,你应该简化它:

CASE WHEN 
  DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN 
  DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
  END 
AS Days_Past_Due
  1. 没有ELSE的CASE ..隐式返回ELSE分支的NULL。
  2. 其中一个或两个日期为NULL的Datediff返回NULL。无需特殊魔法。请查看此SQL Fiddle

答案 1 :(得分:0)

尝试类似:

CASE 
  WHEN table.OpenDate IS NULL THEN NULL
  WHEN DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN 
   DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
  ELSE NULL 
END AS Days_Past_Due

答案 2 :(得分:0)

- 在CASE中添加一行来处理NULL表.OpenDate并将其渲染为NULL

CASE
 WHEN DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
 WHEN table.OpenDate IS NULL THEN NULL
 ELSE NULL
END 
AS Days_Past_Due