使用SQRT()的无效浮点运算

时间:2018-10-05 10:14:31

标签: sql-server

当我SQRT(X)一个值时,我收到一个无效的浮点运算错误。

在什么原因下会发生此错误,我该如何选择X的值以防止发生此错误?

在某些情况下,X值是库存商品的平均销售量。

我尝试SQRT(ABS(x))时没有运气。

谢谢

2 个答案:

答案 0 :(得分:1)

据我所知,SQRT(X)给出错误“发生无效的浮点运算”的唯一情况是X为负数时。但是,您已经通过使用如下的ABS函数来解决此问题:SQRT(ABS(X))。

因此,我的猜测是该错误实际上并非来自SQRT函数,而是来自附近的其他地方。让我们看看您给出的表达式:

SQRT(2*50*ABS(X)) / NULLIF(B*0.2/12,0))

该表达式显然带有一个右括号。这使我认为它只是较大表达式的一部分,并且较大表达式是错误的原因。

例如,如果B为0,则NULLIF()变为NULL。您将其除以NULL,从而得到NULL结果。现在,您如何处理此结果?也许还有其他一些计算不能很好地处理NULL?

这里有很多猜测。如果我的猜测不能为您指明正确的方向,那么了解错误的B和X值以及包含该表达式的完整语句会很有帮助。

答案 1 :(得分:0)

有一个T_SQL命令可以计算变量的类型。您可以在计算变量的平方根之前查看其类型。 命令是:

SQL_VARIANT_PROPERTY 

(请参见网站https://blog.sqlauthority.com/2013/12/15/sql-server-how-to-identify-datatypes-and-properties-of-variable/

另一方面,很抱歉告诉您,我不知道它是否适用于2018版本,因为我没有办法检查它。但是您可以找到适用于您的SQL Server版本的等效命令。 希望能有所帮助。