SQL Server 2014:将十进制(18,0)转换为十进制(18,5)

时间:2017-07-05 21:20:49

标签: sql-server type-conversion

因此,由于前一个在特定数据库中工作的人所犯的错误,我有一个应该是十进制(18,5)的列,而是一个十进制(18,0)。 (如果没有指定精度和比例,这显然是SQL Server的默认设置。)

我添加了一个合适类型的新列,但是如下所示,多次尝试进行转换失败了:

UPDATE [Case].[TableThatWasBuiltWrong] SET NewDecimalValue = 
CONVERT(DECIMAL(18,5), OldDecimalValue)

这会返回一个算术溢出错误 - 虽然严格地说是正确的,但并不是我所关心的(我已经证实,目前没有数据超过5位小数,更不用说13的预期限制了。) / p>

鉴于这种情况,我如何将OldDecimalValue的内容转换为NewDecimalValue?

(编辑为在实际使用中更正为SQL Server版本)

1 个答案:

答案 0 :(得分:0)

如果您的值小于或等于 9999999999999.49999

,则应该没有错

参见示例:

DECLARE @val DECIMAL(18,0)=9999999999999.49999
SELECT @val dec1,CAST(@val AS DECIMAL(18,5)) dec2

结果

enter image description here

但是越过这个限制,即使保持在18.5范围内,也会导致错误。

以下是在限制范围内,但是,将通过例外:

DECLARE @val DECIMAL(18,0)=9999999999999.59999
SELECT @val dec1,CAST(@val AS DECIMAL(18,5)) dec2

将通过:

enter image description here