与案例陈述和日期时间格式相加

时间:2016-11-29 08:26:01

标签: sql-server datetime select sum case

我有一个简单的查询,并且注意到当我写一个sum语句时,结果总数与我的预期不符。我认为在评估具有'datetime'格式的列时。不确定如何解决它。无法搜索正确的短语以找到解决方案,但我希望它是一个常见的短语。也许是演员或转换为DATE格式,但那些确实产生了有意义的答案。

SELECT   X.X_ITEMID,
         SUM(CASE WHEN X.ActivityDate < '11/29/2016' THEN X.Qty ELSE 0 END) AS SUM_X

FROM     ERP_X X

WHERE    X_ITEMID = 'abcdef'
GROUP BY X.X_ITEMID

2 个答案:

答案 0 :(得分:3)

当您将日期[时间] s与字符文字进行比较时,日期将转换为字符(使用默认日期格式),然后按字典顺序进行比较,这几乎总是一个坏主意。相反,您应该将字符串文字显式转换为日期时间,并允许数据库正确地比较它们:

SELECT   X.X_ITEMID,
         SUM(CASE WHEN X.ActivityDate < CONVERT(datetime, '11/29/2016', 101) 
                  THEN X.Qty 
                  ELSE 0 
             END) AS SUM_X
FROM     ERP_X X
WHERE    X_ITEMID = 'abcdef'
GROUP BY X.X_ITEMID

答案 1 :(得分:0)

尝试下面的代码,我希望它能为您提供所需的正确结果。

SELECT   X.X_ITEMID,
         SUM(CASE WHEN convert(char(8),X.ActivityDate,112) < '20161129'
                  THEN X.Qty 
                  ELSE 0 
         END) AS SUM_X FROM     ERP_X X
WHERE    X_ITEMID = 'abcdef'
GROUP BY X.X_ITEMID