替换oracle sql case语句中的日期错误

时间:2013-03-27 12:19:04

标签: sql oracle11g

我有一个包含日期错误的表。

该错误是一个错字,如下所示: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;

不幸的是,我不能简单地用正确的值更新错误,因为该表每月由另一个数据库更新,该数据库是错误的来源。我每个月都要纠正它。

我的查询有什么问题? 还有另外的工作吗?

2 个答案:

答案 0 :(得分: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'

......似乎是一个更好的解决办法。

答案 1 :(得分: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.