【发布时间】:2016-03-25 18:37:20
【问题描述】:
我有一个暂存表,其中加载了来自 SAS 数据集的数据,该数据集包含 5M 条记录。所有列都是varchar。我正在尝试将几列转换为decimal(32,10)。但它会产生错误。我尝试了强制转换,我尝试了转换,甚至在小数点前后拆分数据 - 结果相同。
我查看了该列的 IsNumeric 标志,有 0 条记录 1 表示数据是数字。
case
when wtd_count = '.' THEN NULL
when wtd_count = '' THEN NULL
else convert(decimal(32, 10), wtd_count)
end
错误:
消息 8114,第 16 级,状态 5,第 99 行
将数据类型 varchar 转换为数值时出错。
所以我想知道我还能做些什么来将数据转换为十进制?任何想法? 任何帮助将不胜感激。
【问题讨论】:
-
必须是十进制吗? Val或Long怎么样?我假设您希望该值是一个数字?
-
您显然在该表中至少有一个值无法转换为小数。如果您使用的是 2012 年或更新版本,请查看 TRY_PARSE (msdn.microsoft.com/en-us/library/hh213126.aspx)。
-
感谢您的回复@Sean Lange。无法使用 Try_Parse,因为我在 Sql server 11.0.x 上。
-
感谢您回复@Leptonator。转换为数字 (32,10) 有效。只是不要小数(32,10)。不知道为什么会这样。
-
您可以尝试通过游标运行数据,以便逐条记录,或者尝试将其批量处理成一千条记录,以便找出导致问题的特定数据。以下语句在 SQL 2014 中运行,因此它是有效的精度和小数位数。 SELECT CAST('7.2' AS DECIMAL(32,10))
标签: sql-server