sql - 将表达式转换为数据类型 float 时出现算术溢出错误

标签 sql sql-server-2008 excel ddl

正在进行债券分析。我试图制作一个复制Excel PMT功能的支付功能。对于债券,“Cusip”是其标识符,“PASS THRU RATE”是其年利率,“ORIGINAL WA MATURITY”是总期数,“ORIGINAL BALANCE”是债券的原始面值。纽带。

每月纸质付款的计算公式为:

M=[OF(i(1+i)^n)]/[(1+i)^(n-1)]
M=Monthly payment
OF=Original Face
i=annual interest rate/12
n=number of periods

我有一个表,其中包含此函数所需的所有列,以及不同月份的不同表,我将尝试使用它。这是我到目前为止所拥有的,创建函数并尝试修复数据类型:

if object_id('dbo.PMT') > 0
drop function dbo.PMT
go

create function dbo.PMT(@rate numeric(15,9), @periods smallint, @principal numeric(20,2) )
returns numeric (38,9)
as
begin
declare @pmt numeric (38,9)
select @pmt = @principal 
/ (power(1+@rate,@periods)-1) 
* (@rate*power(1+@rate,@periods))
return @pmt
end

go

drop function dbo.PMT
go
create function dbo.PMT
(
@rate float,
@periods smallint,
@principal numeric(20,2)
)
returns numeric (38,9)
as
begin
declare @pmt numeric (38,9)

declare @WK_periods float,
@WK_principal float,
@wk_One float,
@WK_power float

select  @WK_periods = @periods,
@WK_principal = @principal,
@WK_One = 1

select  @pmt =
round(
( @WK_principal * (@rate*power(@WK_One+@rate,@WK_periods)))
/ (power(@WK_One+@rate,@WK_periods)-@WK_One)
,9)

return @pmt

end
go

select ALL [CUSIP NUMBER]
,[PASS THRU RATE]
,[ORIGINAL WA MATURITY]
,[ORIGINAL BALANCE],
dbo.pmt((mbs012013.[PASS THRU RATE]),mbs012013.[ORIGINAL WA MATURITY],mbs012013.[ORIGINAL BALANCE])
FROM 
    [MBS_STATS].[dbo].[mbs012013]

但是,我收到

(502882 row(s) affected)
Msg 8115, Level 16, State 2, Line 2
Arithmetic overflow error converting expression to data type float.

当我尝试执行它时。我不知道是什么原因造成的。任何帮助都会很棒!

最佳答案

在下面的行中,您将 @WK_principal 作为 FLOAT,并且您正在分配 @principal 的值,该值是数字(20,2)

@WK_principal = @principal,

这似乎是最有可能的罪魁祸首。我们需要能够看到您的数据才能提供帮助。另外,我不清楚为什么您要以一种方式创建该函数,然后删除它并以不同的方式重新创建它。或者你只是展示了两种不同的尝试?

关于sql - 将表达式转换为数据类型 float 时出现算术溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214209/

相关文章:

mysql - 帮助一个SQL语句

mysql - 当值的数量未知时,将多个值插入单个字段的替代方法

sql-server-2008 - SQL Server 2008 备份最佳实践

sql-server-2008 - SQL Server 中 IST 中的日期

excel - 如何缩小一个巨大的Excel文件

vba - 如何在循环的每次迭代中添加一个表?

excel - 如何使用 Excel 公式将一个工作表中的单元格范围引用到另一个工作表?

sql - 在 postgres "in"子句中使用变量

sql - 如何修改我的 SQL 以选择与不同行中的日期匹配的值?

sql-server-2008 - SQL Server : track table inserts