0

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

错误是一个看起来像这样的错字:01-AUG-208 而不是 01-AUG-2008。我要做的是使用正确的信息从该表创建一个视图。

我已经尝试过了,但它给了我一个 ORA-01858: a non-numeric character found where a digit is expected

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;

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

我的查询有什么问题?还有其他工作吗?

4

2 回答 2

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'

...不过似乎是一个更好的解决方案。

于 2013-03-27T13:16:16.233 回答
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.
于 2013-03-27T12:59:55.560 回答