对于以下语句,我得到零除错误.
select ((((57151130.0000000000)+(57612530.0000000000))/2)/((12548020.0000000000)-(34321580.0000000000)+(21773560.0000000000)))*366
Run Code Online (Sandbox Code Playgroud)
您提供文字值的事实有点奇怪,但是,一种避免除以0错误的方法是使用NULLIF(Transact-SQL).
NULLIF需要2个参数.如果参数的2个表达式的值是相同的值,则NULLIF返回NULL,否则返回第一个表达式的值.例如(用字面意思):
SELECT NULLIF(1,0), NULLIF('a' + 'b' + 'c','abc');
Run Code Online (Sandbox Code Playgroud)
这将返回值1和NULL.对于您的查询,格式将是:
SELECT (((57151130.0000000000+57612530.0000000000)/2)/NULLIF(12548020.0000000000-34321580.0000000000+21773560.0000000000,0))*366
Run Code Online (Sandbox Code Playgroud)
注意我已经删除了几个括号,因为不需要在一对中包装每个值/表达式.这样做可能会降低可读性.
然后,如果除数下的表达式具有该值0,NULL则将返回该值.考虑到它NULL代表一个未知值,并且{expr}/0当然也是一个未知值,该值将是最合适的.
如果您需要以NULL特定方式表示值,则可以将整个表达式进一步包装ISNULL.
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |