【发布时间】:2017-12-09 17:03:02
【问题描述】:
因此,由于以前在特定数据库中工作的人犯了一个错误,我有一个列应该是 Decimal(18,5),但实际上是 Decimal(18,0)。 (如果您不指定精度和小数位数,这显然是 SQL Server 的默认设置。)
我添加了一个适当类型的新列,但多次尝试进行转换,如下所示:
UPDATE [Case].[TableThatWasBuiltWrong] SET NewDecimalValue =
CONVERT(DECIMAL(18,5), OldDecimalValue)
这会返回一个算术溢出错误——虽然严格正确,但我并不关心(我已经验证目前没有任何数据超过 5 位小数,更不用说预期的 13 位限制了)。
鉴于这种情况,如何将 OldDecimalValue 的内容转化为 NewDecimalValue?
(修改为实际使用中的SQL Server版本)
【问题讨论】:
-
显然有数据超过了这个限制。
-
为什么不直接改变原始列呢?无论如何,有些东西超过了这个限制,很可能是 13 位数字部分。运行它并检查
select max(len(floor(OldDecimalValue))) from TableThatWasBuiltWrong。结果是 > 13 吗? -
@scsimon 我认为
SELECT MAX(OldDecimalValue), MIN(OldDecimalValue)就足够了 -
@M.Ali 但是...为什么?,要求是将其转换为
decimal(18,5) -
没有 SQL Server 2015 - 我们有 SQL Server 2000、2005、2008、2008 R2、2012、2014、2016 和 2017 正在开发中 - 你是哪一个指的是??
标签: sql-server type-conversion