2013-03-27 44 views
0

我有一個包含日期錯誤的表。在oracle sql case語句中替換日期錯誤

錯誤是這樣的錯字:01-AUG-208而不是01-AUG-2008。 我想要做的是用正確的信息從該表創建一個視圖。

我都試過,但它給了我一個ORA-01858:發現一個非數字字符,其中數字預計

CREATE OR REPLACE VIEW IC_STRUCTURE("DATE_DE_CONSTRUCTION") AS 
SELECT 
    CASE 
    WHEN DATE_DE_CONSTRUCTION = '01-AUG-208' 
    THEN TO_DATE('01-AUG-2008') 
    ELSE DATE_DE_CONSTRUCTION 
    END AS DATE_DE_CONSTRUCTION 
FROM structure_souterraine; 

不幸的是我不能簡單地通過正確的值,因爲該表是更新錯誤每個月都會更新另一個數據庫,這是錯誤的來源。我不得不每月糾正一次。

我的查詢出了什麼問題? 還有其他解決方法嗎?

+0

ough,請看看這裏:http://www.oracle.com/technetwork/issue-archive/2012/12-jan/o12plsql-1408561.html。簡短提示:使用'TO_CHAR(datestamp,'format')'獲取視覺日期並使用'TO_DATE()'獲取日期類型 – Najzero 2013-03-27 12:21:33

回答

2

我會認爲你會想:

CREATE OR REPLACE VIEW IC_STRUCTURE("DATE_DE_CONSTRUCTION") AS 
SELECT 
    CASE 
    WHEN DATE_DE_CONSTRUCTION = '01-AUG-208' 
    THEN TO_DATE('01-AUG-2008','DD-MON-YYYY') 
    ELSE TO_DATE(DATE_DE_CONSTRUCTION,'DD-MON-YYYY') 
    END AS DATE_DE_CONSTRUCTION 
FROM structure_souterraine; 

更新不正確的值,並把檢查約束上:

TO_DATE(DATE_DE_CONSTRUCTION,'DD-MON-YYYY') > date '1900-01-01' 

...似乎是一個更好的修復雖然。

+0

謝謝,我改變了它,但它做的工作:) – 2013-03-27 14:57:46

0
WHEN DATE_DE_CONSTRUCTION = '01-AUG-208' -- Date or char? 
THEN TO_DATE('01-AUG-2008') -- this is a date 
ELSE DATE_DE_CONSTRUCTION -- must be date datatype. Your DATE_DE_CONSTRUCTION most likely char. Convert it to date.