我有一个包含日期错误的表。
该错误是一个错字,如下所示: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 :(得分: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.