Varchar到数字转换错误

时间:2013-05-17 15:14:21

标签: sql sql-server types

我在下面有这个简单的查询(SQL Server数据库),我不知道为什么我会收到错误

  

将数据类型varchar转换为数字时出错。

所有数据类型均为decimal。我的转换不正确吗?任何帮助表示赞赏。

SELECT                  
    RTRIM(year_time) AS year_time ,
    actual = CASE actual
                  WHEN '.00' THEN 0
                  WHEN '' THEN 0
                  ELSE CAST(actual AS NUMERIC(18, 2))
             END ,
    end_balance = CASE end_balance
                       WHEN '.00' THEN 0
                       WHEN '' THEN 0
                       ELSE CAST(end_balance AS NUMERIC(18, 2))
                  END ,
    RTRIM(fund_code) AS fund_code ,
    RTRIM(function_code) AS function_code ,
    RTRIM(object_code) AS object_code ,
    RTRIM(source_code) AS source_code ,
    RTRIM(balance_sheet_code) AS balance_sheet_code
FROM    
    dbo.raw_ledger WITH (NOLOCK)

1 个答案:

答案 0 :(得分:1)

这假设actualend_balance确实是字符串(我看不出任何其他明显的原因,你会得到你得到的错误)。您可以像这样使用isnumeric()函数:

actual = CASE actual
              WHEN '.00' THEN 0
              WHEN '' THEN 0
              when isnumeric(actual) = 1 then CAST(actual AS NUMERIC(18, 2))
         END ,
end_balance = CASE end_balance
                   WHEN '.00' THEN 0
                   WHEN '' THEN 0
                   when isnumeric(end_balance) = 1 then  CAST(end_balance AS NUMERIC(18, 2))
              END ,

如果值不是数字,则返回NULL,但它应该可以防止您的错误。