对于以下语句,我得到除以零的错误。
select ((((57151130.0000000000)+(57612530.0000000000))/2)/((12548020.0000000000)-(34321580.0000000000)+(21773560.0000000000)))*366
答案 0 :(得分:5)
您提供文字值的事实有点奇怪,但是,一种避免除以0的错误的方法是使用NULLIF (Transact-SQL)。
NULLIF
带有2个参数。如果参数的2个表达式的值相同,则NULLIF
返回NULL
,否则返回第一个表达式的值。例如(按字面意思):
SELECT NULLIF(1,0), NULLIF('a' + 'b' + 'c','abc');
这将返回值1
和NULL
。对于您的查询,格式为:
SELECT (((57151130.0000000000+57612530.0000000000)/2)/NULLIF(12548020.0000000000-34321580.0000000000+21773560.0000000000,0))*366
请注意,我删除了多个括号,因为不需要将每个值/表达式都包装在一对中。这样做可能会降低可读性。
然后,如果除数下的表达式的值为0
,则将返回值NULL
。考虑到NULL
代表一个未知值,而{expr}/0
当然也是一个未知值,那么该值将是最合适的。
如果随后需要以特定方式表示NULL
值,则可以将 whole 表达式包装在另外的ISNULL
中。
答案 1 :(得分:0)
此外,您可以使用CASE
检查零值语句:
select (
(((57151130.0000000000)+(57612530.0000000000))/2)
/
CASE WHEN((12548020.0000000000)-(34321580.0000000000)+(21773560.0000000000)) = 0 THEN NULL
ELSE ((12548020.0000000000)-(34321580.0000000000)+(21773560.0000000000))
END
)*366