加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL Server 2008中计算对数时出现无效的浮点运算错误

发布时间:2020-12-12 06:40:52 所属栏目:MsSql教程 来源:网络整理
导读:在Microsoft SQL Server 2008中,我有一个表,比如myTable,包含大约600k行(实际上,它是连接其他几个表的结果,但我认为这并不重要).它的一个列,比如value是numeric(6,2)类型. 简单查询SELECT值FROM myTable ORDER BY值当然返回大约600k个数字,从1.01开始(即最低)
在Microsoft SQL Server 2008中,我有一个表,比如myTable,包含大约600k行(实际上,它是连接其他几个表的结果,但我认为这并不重要).它的一个列,比如value是numeric(6,2)类型.

简单查询SELECT值FROM myTable ORDER BY值当然返回大约600k个数字,从1.01开始(即最低),以70.00(最高)结束;没有NULL或其他值.

请注意,所有这些值都是数字和正数.但是,当调用SELECT LOG(value)FROM myTable时,我收到错误消息“发生了无效的浮点运算”.

查询运行约3分钟后,始终显示此错误.将600k值复制到Excel并计算其LN()时,绝对没有问题.

我试过将值转换为real或float,这根本没用.最后我找到了一个解决方法:SELECT LOG(CASE WHEN值> 0 THEN值ELSE 1 END)来自myTable.这很有效.但是,当所有价值观都是积极的时候呢?我试图取结果并将对数与Excel计算的对数进行比较 – 它们都是相同的(在某些行中只出现10 ^( – 15)或更小的顺序的差异,这几乎肯定是由不同的准确度给出的) .这意味着我想,CASE语句中的条件总是正确的.

有谁知道为什么会出现这个错误?任何帮助赞赏.谢谢.

解决方法

您可以识别导致概率的特定值;
declare @f numeric(6,2),@r float
begin try select
    @f = value,@r = LOG(value) 
from mytable
end try begin catch
    select error_message(),'value=',@f
end catch

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读