Sql 按数据筛选的列和表

Sql 按数据筛选的列和表,sql,sql-server,visual-studio-2010,sql-server-2008,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

在本表中:

        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
并且只返回null,需要强制转换还是什么??? 我用这个参数在C中调用这个过程

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

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

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


由于您使用的是DATA>=@inicio和DATA,参数@inicio的值为2013-07-11 0:00:00.000

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


由于您使用的是DATA>=@inicio和DATA,我同意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,因为它不能解析为单个数字

我同意宾厄姆先生的答案,但我会使用稍微不同的方法进行比较:

 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,因为它不能解析为单个数字

DATA>=@inicio和DATA是的,正如@mr.Reband所说的,您的where子句过滤掉了除那些where DATA='@inicio'之外的所有值。您试图在where子句中实现什么?DATA>=@inicio和DATA是的,正如@mr.Reband所述,您的where子句正在过滤掉除where DATA='@inicio'之外的所有值。你想在where子句中实现什么?有趣的变化。我会找时间调查的。我以后会调查的
 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