消息3623,发生无效的浮点运算



当我试图更新一些表的值时,我得到了这个错误。

我有一个列有一些浮动值的表

Values 
---------------------
11.7830808596997
-9.41220524769667
1.70771403155729
-26.1598813945345
1.40722323420305
0.315202798180501
-3.27870943910565
4.49832736699458
-21.8406197004573
12.6569938818624
10.3327211608816
-14.9366297400332
-1.96665717283736
5.90430556370099
1.59122918690946
1.01784176743728
-41.3800628432377

现在我想把这个值改为0.3333的幂。

所以我写了一份声明

update table 
set value = power(value, 0.3333)

但我收到一个错误

Msg3623
发生无效浮点运算

你能建议我如何解决这个问题吗?我想做一些类似的事情

(1 + value) ^ 1/3 - 1

在T-SQL 中

我认为这就是您想要的逻辑:

select sign(val) * exp(log(abs(val)) / 3)
from (select -8 as val) t

问题是,你不能把负数提高到分数幂,因为结果通常是虚数,而不是浮点数。这个简单的方法将数值转换为正数并记住符号

也可以使用:

select sign(val) * power(abs(val), 1.0 / 3)

这里有一个db<gt;不停摆弄

最新更新