【问题标题】:T-SQL 2005 - Divide by zero error encounteredT-SQL 2005 - 遇到除以零错误
【发布时间】:2010-06-01 23:40:47
【问题描述】:
我正在尝试使用类似于以下行的代码从存储过程中获取一些百分比数据。显然,当 base.[XXX_DataSetB] 返回 0 时,这将导致(遇到除以零错误)问题,这在某些时候可能会发生。
有谁知道我如何以最有效的方式处理这个问题?
注意:大约有 20 多行如下所示...
cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal) /
base.[XXX_DataSetB] as [XXX_Percentage]
【问题讨论】:
标签:
sql
sql-server-2005
tsql
【解决方案1】:
我猜这取决于您在 XXX_DataSetB 为零时所期望的行为。
如果您不希望返回任何可能导致错误的行,您可以通过在查询中添加 where XXX_DataSetB <> 0 来轻松过滤掉这些行。
如果您希望问题行为 NULL,那么您可以使用 case 语句,或者类似的东西:
cast(([XXX_DataSetB] - [XXX_DataSetA]) as decimal) / nullif([XXX_DataSetB], 0)
【解决方案2】:
我会通过将底部项设为空而不是零来强制平均值为空:
cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal)
/ case when base.[XXX_DataSetB] = 0 then null
else base.[XXX_DataSetB] end as [XXX_Percentage]