我有这个查询,我看看AUD_CloseDate
是否>比今天的日期。现在我想象这些在AUD_CloseDate
中的某个地方是NULL,所以在这个语句中我还要检查AUD_CloseDate
中是否有NULL值以及是否有赋值1900\01\01
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 :(得分:0)
使用ISNULL功能
ISNULL(AUD_CloseDate, '1900-01-01')
你也是:
添加0天到目前为止
把它铸成char(10)
,然后再次铸造到目前为止......为什么?
您可以通过这些转换获得相同的结果,例如:
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:)
答案 1 :(得分: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
答案 2 :(得分:0)
COALESCE
符合ANSI标准。与ISNULL语法相同:COALESCE(t2.AUD_CloseDate,'19000101')