SQL除以零

时间:2012-06-28 16:16:52

标签: sql

我有一个查询,在子查询中通过划分两列来计算金额。我得到这个错误,我除了零,但实际上我没有0或NULL值。这是查询:

SELECT 
(SELECT ISNULL((IznosIni/VrednostIni),0)
from  plPlataF f1 
where plPresmetka_id in 
    (select plPresmetka_id from plPresmetka where f_vlezno=1 and Kod ='01') 
and f1.plPlataS_id=s.plPlataS_id) 
FROM plPlataS s 
WHERE plPlataH_Id = 171

当我运行此查询时(我只将两个值连接起来' ---'介于两者之间)

SELECT 
(SELECT CONVERT(NVARCHAR(20),IznosIni)+'---'+CONVERT(NVARCHAR(20),VrednostIni)
from  plPlataF f1 
where plPresmetka_id in 
    (select plPresmetka_id from plPresmetka where f_vlezno=1 and Kod ='01') 
and f1.plPlataS_id=s.plPlataS_id) 
FROM plPlataS s 
WHERE plPlataH_Id = 171

我得到了结果:

32414.00---168.00 
37613.00---168.00 
31341.00---168.00 
49148.00---168.00 
110507.00---168.00 
36601.00---168.00 
37895.00---168.00 
59699.00---168.00 
43978.00---168.00 
50991.00---168.00 
36601.00---168.00 
48087.00---168.00 
45921.00---168.00 
59499.00---168.00 
37613.00---168.00 
37613.00---168.00 
34850.00---168.00 
33632.00---168.00 
33632.00---168.00 

在任何地方都没有0! 有人可以请帮助我不知道问题可能是什么。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

由于您使用的是ISNULL,我猜测这是TSQL。您应该始终考虑除以零的可能性。您可以使用NULLIF

SELECT 
(SELECT ISNULL((IznosIni/NULLIF(VrednostIni,0)),0)
from  plPlataF f1 
where plPresmetka_id in 
    (select plPresmetka_id from plPresmetka where f_vlezno=1 and Kod ='01') 
and f1.plPlataS_id=s.plPlataS_id) 
FROM plPlataS s 
WHERE plPlataH_Id = 171

答案 1 :(得分:1)

在应用where过滤器之前,您的RDBMS似乎正在评估除法。这完全合法。

你需要防范这种可能性:

case when VrednostIni = 0 then null else ISNULL((IznosIni/VrednostIni),0 end