算术溢出错误…请帮助。SQL
我收到了错误 将表达式转换为数据类型浮点时出现算术溢出错误 关于以下代码:算术溢出错误…请帮助。SQL,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我收到了错误 将表达式转换为数据类型浮点时出现算术溢出错误 关于以下代码: SELECT b.[CUSIP NUMBER], b.[PASS THRU RATE], a.[CURRENT BALANCE], b.[ORIGINAL WA MATURITY], b.[CURRENT WA MATURITY], (b.[ORIGINAL BALANCE] * ((b.[PASS THRU RATE]*.01)/12))/ (1-((1 + power (( (b.[PA
SELECT b.[CUSIP NUMBER],
b.[PASS THRU RATE],
a.[CURRENT BALANCE],
b.[ORIGINAL WA MATURITY],
b.[CURRENT WA MATURITY],
(b.[ORIGINAL BALANCE] * ((b.[PASS THRU RATE]*.01)/12))/ (1-((1 + power (( (b.[PASS THRU RATE]*.01 )/ 12), -b.[ORIGINAL WA MATURITY] ) )))
FROM DBO.mbs012013 a, DBO.mbs022013 b
WHERE a.[CUSIP NUMBER] = b.[CUSIP NUMBER]
我没有指定数字为任何特定类型,因此我不确定为什么会收到此错误。如果有人能告诉我如何解决这个问题,我将不胜感激
参考:cusip编号是一个序列号,其余是输入(利率、银行余额、月到期日等)问题可能在这里:
power (( (b.[PASS THRU RATE]*.01 )/ 12), -b.[ORIGINAL WA MATURITY] )
如果b.[通过率]
较小,而-b.[原始WA到期日]
较大,则结果可能大于数值类型所能容纳的值。尝试将其转换为浮动:
power (( CAST(b.[PASS THRU RATE]*.01 / 12) AS FLOAT), -b.[ORIGINAL WA MATURITY] ) )))
你说通过率可以是1-10
和原始WA到期日
之间的0-360
您可能遇到的最坏情况是通过率=1和原始WA到期日=360
如果是那样的话,你会做什么
SELECT POWER(0.0008333333333, -360)
这有一个结果。SQL Server中没有任何数据类型的范围大于float
,并且“仅”允许范围为±1.79E+308
如果需要进行这些计算,则需要在TSQL之外进行。但是你确定你的公式是正确的吗
不应该是这样的吗
SELECT POWER(1 + 0.0008333333333, -360)
SELECT POWER(1 - 0.0008333333333, -360)
这是什么数据库系统?SQL只是许多数据库使用的查询语言。我们需要知道这是针对Oracle、Postgres、MySQL、SQL Server、IBM DB2还是其他什么。请添加相关且有意义的标签-谢谢!很抱歉,它的SQL Server可能与的重复,您可能会被零或类似的数字除SQL Server中没有数据类型可以处理10^360
错误消息正在抱怨溢出转换为浮点。@MartinSmith-奇怪的是,选择幂(.01,-350)
导致将表达式转换为数据类型float时出现算术溢出错误。
@HABO-也就是1E+700
。浮点数上升至1.79E+308