1

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

目前,声明如下:

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 语句以便能够处理空表。OpenDate 字段,返回一个 NULL 作为 Days_Past_Due。是否有捷径可寻?

谢谢!!!

4

3 回答 3

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
于 2012-11-03T21:56:37.627 回答
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
于 2012-11-03T20:39:49.553 回答
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
于 2012-11-03T20:44:15.137 回答