2014-01-29 24 views
1

我有這個查詢,並且我看到如果AUD_CloseDate>是比今天的日期。現在,我想這會是一個NULL某處AUD_CloseDate所以在此聲明我也想檢查是否有在AUD_CloseDate NULL值,如果指定值1900\01\01在帶有日期的IF語句中查看NULL是否存在

SELECT ([Target Status] + '' + CAST(COUNT(*) AS NVARCHAR(255)) + ' of ' + CAST(@Total AS NVARCHAR(255))) AS TargetStatus, CAST(COUNT(*) AS FLOAT)/CAST(@Total AS FLOAT) AS [Count] 
     FROM (
     SELECT CASE WHEN CONVERT(DATETIME,CONVERT(CHAR(10),DATEADD(DAY,0,t2.AUD_CloseDate), 101)) < CONVERT(DATETIME,CONVERT(CHAR(10),DATEADD(DAY,0,GETDATE()), 101))AND t1.[Status] in ('Open','Closed') 
       THEN 'Over Due: ' 
       ELSE 'On Time: ' END AS [Target Status] 
       FROM #tmp1 t1 INNER JOIN dbo.Audit t2 
       ON t1.AUD_ID = t2.AUD_ID 
       WHERE t2.AUD_Deleted = 0 
       AND t2.AUD_LeadAuditor IN (SELECT ID FROM [dbo].[fx_SplitCommaSeperatedValues] (@LeadAssessor)) 
       AND t2.AUD_Year = @Year 
       AND AUD_Quarter IN (SELECT ID FROM [dbo].[fx_SplitCommaSeperatedValues] (@Quarter)))DER 

回答

0

使用ISNULL功能

ISNULL(AUD_CloseDate, '1900-01-01') 

你也:
將0添加天日期
澆鑄成CHAR(10)
,然後重新鑄造日期...爲什麼?

可以達到同樣的效果withou這些轉換,像這樣的例子:

SELECT 
CASE 
    WHEN ISNULL(@a, '2014-01-29 13:50') < GETDATE() 
    THEN 'Over Due: ' 
    ELSE 'On Time: ' 
END 

結果 '在因:'

SELECT 
CASE 
    WHEN ISNULL(@a, '2014-01-29 15:00') < GETDATE() 
    THEN 'Over Due: ' 
    ELSE 'On Time: ' 
END 

結果 '開啓時間:'

**現在是13:55 :)

0

爲什麼一個ISNULL()statement

ISNULL(t2.AUD_CloseDate,'19000101') 

在您例如:

SELECT ([Target Status] + '' + CAST(COUNT(*) AS NVARCHAR(255)) + ' of ' + CAST(@Total AS NVARCHAR(255))) AS TargetStatus, CAST(COUNT(*) AS FLOAT)/CAST(@Total AS FLOAT) AS [Count] 
     FROM (
     SELECT CASE WHEN CONVERT(DATETIME,CONVERT(CHAR(10),DATEADD(DAY,0,ISNULL(t2.AUD_CloseDate,'19000101')), 101)) < CONVERT(DATETIME,CONVERT(CHAR(10),DATEADD(DAY,0,GETDATE()), 101))AND t1.[Status] in ('Open','Closed') 
       THEN 'Over Due: ' 
       ELSE 'On Time: ' END AS [Target Status] 
       FROM #tmp1 t1 INNER JOIN dbo.Audit t2 
       ON t1.AUD_ID = t2.AUD_ID 
       WHERE t2.AUD_Deleted = 0 
       AND t2.AUD_LeadAuditor IN (SELECT ID FROM [dbo].[fx_SplitCommaSeperatedValues] (@LeadAssessor)) 
       AND t2.AUD_Year = @Year 
       AND AUD_Quarter IN (SELECT ID FROM [dbo].[fx_SplitCommaSeperatedValues] (@Quarter)))DER 
0

COALESCE是符合ANSI標準。與ISNULL相同的語法:COALESCE(t2.AUD_CloseDate,'19000101')

相關問題