sum列表按数据过滤

时间:2013-07-11 20:33:03

标签: sql sql-server visual-studio-2010 sql-server-2008

在此表中:

        Total           Data 
     -----------------------------
         1            2013-07-10 16:37:29.573
        1,5           2013-07-10 16:38:29.573
        0,75          2013-07-10 16:39:29.573
        1,99          2013-07-10 16:40:29.573

我写了这个ms-sql程序:

     ALTER proc [dbo].[empcx](@caixa int,@inicio datetime)as
     select sum(total) ttotal from alteraca 
     where (DATA >= @inicio AND DATA <= @inicio) and caixa=@caixa and pedido <>0

但我用这种方式打电话给我:

     empcx 6 , '11/07/2013'

并且只返回null,需要一个强制转换器还是什么? 我将使用此参数在C#中调用此过程

     label4.Text = dateTimePicker1.Value.ToShortDateString();   

2 个答案:

答案 0 :(得分:1)

参数@inicio的值是2013-07-11 0:00:00.000;

但是在程序中,您将此值与包含时间成分的日期进行比较,例如2013-07-10 16:37:29.573

因为您正在使用(DATA&gt; = @inicio AND DATA&lt; = @inicio),因为上面的Reband先生评论与(DATA = @inicio)相同,所以没有匹配的行,因此返回Null

 ALTER proc [dbo].[empcx](@caixa int,@inicio datetime)as
     select sum(total) ttotal from alteraca 
     where (Convert(varchar(10),DATA,101) = Convert(varchar(10),@inicio,101))
       and caixa=@caixa and pedido <>0

答案 1 :(得分:0)

我同意Bingham先生的回答,但我会用稍微不同的方法进行比较:

 ALTER proc [dbo].[empcx](
   @caixa int,
   @inicio datetime
 )
 as
 select sum(total) ttotal 
 from   alteraca 
 where  (DATA >= @inicio AND DATA < DATEADD(dd, 1, @inicio)) 
   and  caixa=@caixa 
   and  pedido <>0

我没有运行测试,但我相信这会更快。

此外,如果total的值实际上是您显示的 - 逗号分隔的数字字符串 - 当您实际开始返回记录时,您的查询将崩溃。逗号分隔的字符串不能应用SUM,因为它无法解析为单个数字。