在此表中:
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();
答案 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,因为它无法解析为单个数字。