SQL Server善用LOG10 和POWER 函數

博客探讨了MSDN联机注解中Log10与Power函数的反向关联特性,在结果集乘积时推荐使用自然对数的基底,以确保计算的准确性。通过实例验证了不同情况下函数转换的正确性和稳定性。
MSDN聯機註解:LOG10 和POWER 函數是彼此反向關聯。例如,10^ LOG10(n) = n。
只有一個值的轉換時沒問題,以下測測結果集。


;WITH C
AS
(
	SELECT number FROM master..spt_values WHERE number BETWEEN 1 AND 10 AND type IN('P')
)
SELECT POWER(10,SUM(LOG10(number))) FROM C

/*
3628800
*/
--用一個變量驗證一下

DECLARE @i INT
SET @i=1
;WITH C
AS
(
	SELECT number FROM master..spt_values WHERE number BETWEEN 1 AND 10 AND type IN('P')
)
SELECT @i=@i*number FROM C

SELECT @i

/*
3628800
*/

--相同正確

go

--改變一下測試數據

DECLARE @T TABLE(number int)
INSERT @T
select 1 UNION ALL 
SELECT 2 UNION ALL
SELECT 4

SELECT POWER(10,SUM(LOG10(number))) FROM @T
/*
7
*/
DECLARE @i INT
SET @i=1
SELECT @i=@i*number FROM @T
SELECT @i

/*
8
*/
--結果不正確了
反而用自然對數的基底時,更準確。

SELECT EXP(SUM(LOG(number))) FROM @T  
/*
8
*/
結論:在結果集乘積時,別用Log10對數,還是自定議函數穩定。

转载于:https://www.cnblogs.com/Roy_88/archive/2011/08/08/5463069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值