【发布时间】:2014-02-14 09:59:34
【问题描述】:
我正在尝试找出解决这个除以零错误的方法。我目前面临的挑战来自this question I asked not too long ago.
这是我正在使用的代码,我将其插入到年底的报告中:
SELECT CAST(ROUND((.01 * 2541) / Count(date_record_entered), 1) AS decimal(5,1))
FROM dbo.tablename
WHERE date_record_entered IS NOT NULL
and date_record_entered >= 20131201
AND date_record_entered <= 20131231
对于当前或前几个月的报告,数据填充没有任何问题。但是,当访问超过当月的报告时,我在 SQL 中收到以下错误(在 C#/ASP.NET 中也出现类似错误):
Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered
这是我尝试过但没有成功的方法。
示例 #1
SELECT CASE WHEN date_record_entered = 0 then null
ELSE CAST(ROUND(.01 * 2541 / COUNT(date_record_entered),
AS deciamal (5,1)
FROM dbo.tablename
WHERE date_record_entered IS NOT NULL
AND date_record_entered >= 20140201
and date_record_entered <= 20140228
示例 #2
SELECT CAST(ROUND((.01 * 2541) / NULLIF(Count(date_record_entered), 1)
AS decimal(5,1)))
FROM dbo.tablename
WHERE date_record_entered IS NOT NULL
and date_record_entered >= 20140201
AND date_record_entered <= 20140228
样本 #3
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT CAST(ROUND(.01 * 2541 / COUNT(date_record_entered ), 1) AS decimal(5,1))
FROM dbo.tablename
WHERE date_record_entered IS NOT NULL
AND date_record_entered >= 20140201
and date_record_entered <= 20140228
现在第三个可以在 SQL 中使用,但我还没有找到使用 gridview/c# 的方法。
我知道这可能非常简单,但我现在只是在旋转我的轮子。
【问题讨论】:
-
一些回车会使代码更容易阅读。
-
在末尾添加一个
HAVING Count(date_record_entered) > 0怎么样?由于您似乎正在检查date_record_entered = 0但除以Count(date_record_entered) -
为什么 date_record_entered 永远是 0?如果该字段是数据库中的日期字段,那么我认为这是不可能的,它要么是日期,要么是空值。所以如果是这样的话,我会在你的案例陈述中检查它是否为空。
-
你所有的样本都有语法错误。
-
@drewlander
date_record_entered的COUNT()由于WHERE标准可能为 0。
标签: c# asp.net sql gridview sql-server-2012