SQL Server自定义PMT函数与Excel PMT结果不一致,求修正方法
调整SQL Server自定义PMT函数以匹配Excel期初付款结果
Excel PMT函数参数说明
Excel的PMT完整语法是PMT(rate, nper, pv, [fv], [type]),你用到的两个额外参数含义如下:
fv:未来值,指最后一期付款完成后剩余的金额,默认值为0type:付款时间标识,0表示期末付款(默认行为),1表示期初付款
你的SQL函数当前仅实现了期末付款的计算逻辑,而Excel调用时指定了type=1,这是两者结果差异的核心原因。
修改后的SQL Server PMT函数
CREATE FUNCTION dbo.PMT ( @rate FLOAT, @periods NUMERIC(20,7), @principal NUMERIC(20,2), @fv NUMERIC(20,2) = 0, -- 新增未来值参数,默认0 @type INT = 0 -- 新增付款类型参数,0=期末(默认),1=期初 ) RETURNS NUMERIC(38,9) AS BEGIN DECLARE @pmt NUMERIC(38,9) DECLARE @WK_periods FLOAT, @WK_principal FLOAT, @WK_fv FLOAT, @WK_One FLOAT, @WK_power FLOAT SELECT @WK_periods = @periods, @WK_principal = @principal, @WK_fv = @fv, @WK_One = 1 -- 计算复利因子 SET @WK_power = POWER(@WK_One + @rate, @WK_periods) IF @type = 1 -- 期初付款公式 SET @pmt = ROUND( ((@WK_principal * @rate * @WK_power) + @WK_fv * @rate) / ((@WK_power - @WK_One) * (@WK_One + @rate)), 9) ELSE -- 期末付款公式(原逻辑) SET @pmt = ROUND( ((@WK_principal * @rate * @WK_power) + @WK_fv * @rate) / (@WK_power - @WK_One), 9) RETURN @pmt END GO
验证结果
使用你提供的参数调用修改后的函数:
SELECT dbo.PMT(0.006313333, 251.1762480, 1814647.77, 0, 1)
返回结果为14334.96,与Excel的计算结果一致。
内容的提问来源于stack exchange,提问作者Aweda
相关产品推荐
相关产品推荐

