具有平方根的SQL函数会导致问题

时间:2014-02-20 18:25:33

标签: sql sql-server

我有一个错误的查询:

SET @SumDiff = @SitesSum - (select power(SUM(Sums),2)/@NumSites from @SiteSums)
SET @SE = power((@SumDiff/(@NumSites - 1)),0.5)/power(@NumSites,0.5)

此功能大部分时间都有效,但有时会出错 当我遇到问题时,这是值 SUM(Sums) = .01如此平方= .001
@NumSites = 2
@SiteSum = 0

该部分的价值:
select power(@Sums,2)/@NumSites from @SiteSums
5E-05出现,与预期的值匹配,.00005

当我尝试设置@SE时,基本上找到(.00005 / 1)/ 2的平方根(1.4142135623731)的平方根。

应该像3.535533905932725。但是我收到了消息:

Msg 3623, Level 16, State 1, Line 306  
An invalid floating point operation occurred.

.00005是否太小而无法在SQL中划分?我可以做演员吗?这并不总是使用小数,大多数是更大的数字。

1 个答案:

答案 0 :(得分:1)

实际上,使用您的值:

SET @SumDiff = @SitesSum - (select power(SUM(Sums),2)/@NumSites from @SiteSums)

..导致@SumDiff设置为-5E-05 5E-05

所以当你这样做的时候:

power((@SumDiff/(@NumSites - 1)),0.5)

..你试图取一个负数的平方根,这个数字对于一个实数是无效的(未定义)。

ABS(..)功能可以为您解决此问题:

SET @SE = power((ABS(@SumDiff)/(@NumSites - 1)),0.5)/power(@NumSites,0.5)