Sql server 修改CASE语句以处理空值?

Sql server 修改CASE语句以处理空值?,sql-server,tsql,case,Sql Server,Tsql,Case,我需要帮助修改现有的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 我只想更改现有的CAS

我需要帮助修改现有的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语句,使其能够处理null table.OpenDate字段,并将null作为过期天数返回。有没有一个简单的方法可以做到这一点

谢谢

试试以下方法:

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
尝试以下方法:

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
--在案例中添加一行以处理NULL table.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
--在案例中添加一行以处理NULL table.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

与其使表达式变得更复杂,不如简化:

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
  • 案例。。如果没有ELSE,则ELSE分支将隐式返回NULL
  • 日期为NULL的Datediff返回NULL。不需要特殊的魔法。检查这个

  • 与其使表达式变得更复杂,不如简化:

    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
    
  • 案例。。如果没有ELSE,则ELSE分支将隐式返回NULL
  • 日期为NULL的Datediff返回NULL。不需要特殊的魔法。检查这个

  • 谢谢,我需要指定OpenDate何时也不为NULL吗?例如:如果table.OpenDate不为NULL,并且DATEDIFF(dd,table.OpenDate,GetDate())-table.Days_作为_整数)>0,那么DATEDIFF(dd,table.OpenDate,GetDate())-table.Days_作为_整数,如果table.OpenDate为NULL,则为NULL,否则NULL将作为过去的天数结束谢谢,我是否需要指定OpenDate何时也不为NULL?例如:如果table.OpenDate不为NULL,并且DATEDIFF(dd,table.OpenDate,GetDate())-table.Days_作为_整数)>0,那么DATEDIFF(dd,table.OpenDate,GetDate())-table.Days_作为_整数,如果table.OpenDate为NULL,则为NULL,否则NULL将作为过去的天数结束谢谢,我是否需要指定OpenDate何时也不为NULL?例如:如果table.OpenDate不为NULL,并且DATEDIFF(dd,table.OpenDate,GetDate())-table.Days_作为_整数)>0,那么DATEDIFF(dd,table.OpenDate,GetDate())-table.Days_作为_整数,如果table.OpenDate为NULL,则为NULL,否则NULL将作为过去的天数结束谢谢,我是否需要指定OpenDate何时也不为NULL?例如:如果table.OpenDate不为NULL且DATEDIFF(dd,table.OpenDate,GetDate())-table.Days\u作为\u整数)>0,则当table.OpenDate为NULL时,DATEDIFF(dd,table.OpenDate,GetDate())-table.Days\u作为\u整数,否则为NULL,则作为过期天数结束