2013-05-17 72 views
-1

我有低于这个简单的查询(SQL Server数据库),我不知道为什么我得到一个错误VARCHAR到数字转换错误

错误的数据类型为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) 
+2

你使用的是什么确切的数据库系统(和哪个版本)? SQL只是查询语言 - 被许多数据库使用 - 并没有真正告诉我们你正在使用的数据库产品**(MySQL?Postgres?IBM DB2?Oracle?SQL Server?Firebird?) –

+1

只尝试做一次一列,直到找到有问题的列 –

+0

数据库软件是否具有“IsNumeric()”功能? – HABO

回答

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如果值不是数字,而是应该阻止你的错误。