【问题标题】:NULL Date Calculation SQL ServerNULL 日期计算 SQL Server
【发布时间】:2015-09-28 13:27:37
【问题描述】:

我们在 SQL Server 表 SLA 中有 6 列 我尝试从下面添加组合列 QASLA Created - Closed Columns are datetime - Not NULL

EsculationDate - [EsculationFeedback] [InternalEsculationReplay] - [InternalEsculationDate] 列是 datetime 类型和可能为 NULL 值

  alter table SLA
  add QASLA as

  iif((Closed=null),datediff(dd,getdate(),Created),
  (datediff(dd,Closed,Created))-datediff(dd,IIF(COALESCE ([EsculationDate],0)>COALESCE ([InternalEsculationDate],0),COALESCE ([InternalEsculationDate],0),COALESCE ([EsculationDate],0)),
  IIF(COALESCE ([EsculationFeedback],0)>COALESCE ([InternalEsculationReplay],0),COALESCE ([EsculationFeedback],0),COALESCE ([InternalEsculationReplay],0))))

当我尝试插入新记录时

insert into [dbo].[SLA]
([Created],[EsculationDate],[EsculationFeedback],[Closed])
values('10-Jun-15','10-Jun-15','15-Jun-15','15-Jun-15')

QASLA 结果 = -42173 我需要将值 0 作为创建日期 = 10 Jun 和 Closed Date = 15 Jun mins (EsculationDate+EsculationFeedback) 我也尝试使用 ISNULL

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    不太确定我是否理解您的问题,但您 IIF 在这里毫无用处,因为它永远不会等于 NULL。您不能将值与 NULL 进行比较,必须使用 IS NULL

    alter table SLA
      add QASLA as
    
      iif((Closed is null),datediff(dd,getdate(),Created),
      (datediff(dd,Closed,Created))-datediff(dd,IIF(COALESCE ([EsculationDate],0)>COALESCE ([InternalEsculationDate],0),COALESCE ([InternalEsculationDate],0),COALESCE ([EsculationDate],0)),
      IIF(COALESCE ([EsculationFeedback],0)>COALESCE ([InternalEsculationReplay],0),COALESCE ([EsculationFeedback],0),COALESCE ([InternalEsculationReplay],0))))
    

    【讨论】:

      【解决方案2】:

      您的某些 DATEDIFF 语句的日期似乎是“错误的”。您应该将较早的日期作为第二个参数,将较晚的日期作为第三个参数,以返回它们之间的正数。

      此外,在许多情况下,您将 NULL 日期视为 0,其中 0 将被解释为“非常早的日期”。

      我希望您对 NULL 的处理在这里会有很大不同?您不能在列和 NULL 之间使用相等比较,您需要改用 IS NULL 语句,例如“Closed = NULL”变成“Closed IS NULL”。

      最后,您说 Closed Date 不是 NULL,但您在脚本中做的第一件事就是将其与 NULL 进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 2016-06-23
        相关资源
        最近更新 更多