-1

我在下面有这个简单的查询(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)
4

1 回答 1

1

这是假设actualandend_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,但它应该可以防止您的错误。

于 2013-05-17T15:55:00.197 回答