SQL Server 2008 - 存储为Varchar(50)的Int和Decimal值的混合无法转换为Decimal

时间:2014-04-15 18:25:53

标签: sql sql-server-2008

我在SQL Server 2008表格中有两列数据需要从varchar(50)转换为decimal。根据我尝试使用的方法获取不同的错误。

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

  2. 算术溢出

  3. 我尝试过的一些方法:

    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
    

    这应该不是这么难......

1 个答案:

答案 0 :(得分:1)

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

CAST就可以正常工作。

如果您不确定所有值都是数字,您可以在转换之前清除它们;

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

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

An SQLfiddle to test with