2015-09-28 83 views
0

我們必須在SQL Server表6列SLA 我試圖從下面的添加compained列QASLA 創建 - 實心柱有日期時間 - 非NULLNULL日期計算的SQL Server

EsculationDate - [EsculationFeedback] [InternalEsculationReplay ] - [InternalEsculationDate]列是 時間類型,當我嘗試插入一個新的記錄可能爲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值作爲創建日期= 6月10日和結束日期= 6月15日分鐘(EsculationDate + EsculationFeedback) 我嘗試使用ISNULL也

回答

0

不太清楚我理解你的問題,但你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)))) 
0

你的一些DATEDIFF聲明似乎有「錯誤的方式圍繞」日期。你應該有更早的日期作爲第二個參數,後面的日期作爲第三個參數來返回他們之間的積極日子。

另外,在許多情況下,您將NULL日期視爲0,其中0將被解釋爲「非常早期的日期」。

我會期待你的處理NULL在這裏工作非常不同?您不能使用列和NULL之間的相等比較,您需要改爲使用IS NULL語句,例如「Closed = NULL」變成「Closed IS NULL」。

最後,你說封閉日期不是NULL,但你在腳本中做的第一件事是將它與NULL進行比較。