2013-05-17 109 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如果值不是數字,而是應該阻止你的錯誤。