将Varchar转换为Decimal SQL Server时出错



我有一个暂存表,其中加载了来自包含5M条记录的SAS数据集的数据。所有列均为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转换为数字时出错。

所以我想知道我还能做些什么把数据转换成十进制?知道吗?任何帮助都将不胜感激。

如果您使用的是SQL Server 2012及更高版本,请尝试使用try_parse或try_convert

ISNUMERIC对您所做的工作不可靠。它会将带有货币符号和逗号等内容的值标记为有效值。

似乎很可能存在一些非数字数据。TRY_CONVERTTRY_PARSE是您在这里的朋友。仅供参考,SQL Server 11.0.x版本是SQL Server 2012,因此您应该能够使用这些版本。

我也很难相信转换成数字有效,但不是十进制。我找不到任何信息表明这两种数据类型的实际实现是不同的,因此两者都不应该起作用。

我会对你的数据进行更深入的分析,以确保它看起来像你所期望的那样。

在阅读了您的case语句后,我假设您有昏迷分隔的值。我很确定您应该使用:CONVERT(DECIMAL(32,10),REPLACE(wtd_count,',','.'))

最新更新