2013-03-27 65 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.