我在用户函数中使用SQL Server的POWER函数,当基数为负数且指数为分数时,我收到错误,
[MICROSOFT] [ODBC SQL SERVER驱动程序] [SQL SERVER]发生无效浮点操作.
负面基础可以在现实世界中提升到一种力量,这是一个SQL错误吗?如果有的话有解决方法吗?
例:
SELECT POWER(-.2, 9.7)
Run Code Online (Sandbox Code Playgroud)
进一步完善问题
-- These work
SELECT
POWER(-.2, 9)
, POWER(.2, 9.7);
-- This does not
SELECT
POWER(-.2, 9.7);
-- POWER on BOL http://msdn.microsoft.com/en-us/library/ms174276.aspx
-- Returns the same type as submitted in float_expression
-- Perhaps something is awry with typing
DECLARE
@f decimal(35,30) = -.2
, @fout decimal(35,30);
-- This still fails with "An invalid floating point operation occurred"
SELECT
@fout = POWER(@f, 9.7);
Run Code Online (Sandbox Code Playgroud)
结果POWER(-.2, 9.7)最多只是一个虚数,不能表示为单个浮点数.
您可以将浮点指数转换为分数并将其重写POWER(-.2,97/10)为等效的分数POWER(POWER(-.2,97) , 1/10).由于如果N是奇数,则负数的第N个根是实数,但如果N是偶数,则是虚数,因此POWER(-.2,1/10)将是复数.
请注意,POWER(-.2, 0.8) 可以将其作为实数进行求值,因为它只相当于POWER(-.2,4/5)-.2的第5个根是真实的,但我的猜测是SQL甚至不打算尝试确定指数是否可以表示为分数带有奇数分母并抛出错误.