SQL Server 2008 - 混合存储为 Varchar(50) 的 int 和 decimal 值无法转换为十进制



SQL Server 2008表中有两列数据,需要将其从varchar(50)转换为decimal。根据我尝试使用的方法,会得到不同的错误。

  1. 将数据类型varchar转换为numeric时出错。

  2. 算术溢出

我尝试过的一些方法:

CONVERT(DECIMAL(38,10),REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(value)),',',''),' ',''),'-',''))
CASE 
   WHEN value = 1
      THEN CONVERT(numeric(14,2), value)
   ELSE 'NA'
END

以下是我试图转换的表中的数据示例:

271.5
 14.95
352.5
150
 37.5
 20.5
300
 90

这不应该这么难。。。

只要数据干净且范围足够,

CAST就应该工作良好。

如果您不确定所有值实际上都是数字,可以在转换它们之前对它们进行擦除;

SELECT value, CASE WHEN ISNUMERIC(value)=1
              THEN CAST(value AS NUMERIC(10,2))
              END value2
FROM table1

如果字符串value实际上是可转换的,这将把它转换为NUMERIC,否则将给出值NULL

要测试的SQLfiddle。

相关内容

最新更新