我在表中有一个日期列,它是varchar2(10)。 我使用select查询从表中获取一些数据。它继续如下:
Select
.........................
from
.........
where
................
and (to_date(masc_date,'dd-mm-yyyy') between
to_date('10-05-2014','dd-mm-yyyy') and to_date('11-05-2014','dd-mm-yyyy'))
masc_date是日期列,它是varchar2(10),此列中的日期值的格式为' dd-mm-yyyy'。 当我执行上述查询时,我得到ORA-08143:不是有效月份。
但是当我将上述查询修改为:
Select
.........................
from
.........
where
................
and (to_date(masc_date,'dd-mm-yyyy') between
(select to_date('10-05-2014','dd-mm-yyyy') from dual) and
(select to_date('11-05-2014','dd-mm-yyyy') from dual))
查询工作正常。我无法找到此错误的原因,因为在我的第一个查询中,所有" to_date"中的日期值具有相同的格式和char值。
注意:我的数据库中的nls语言是美国语,日期格式为" dd-mon-rr"
答案 0 :(得分:1)
要做的第一件事是检查您的所有数据是否确实是dd-mm-yyyy格式。通常情况下,数据不可信任。
declare
cursor c is select masc_date from table;
l_date date;
begin
for r in c loop
begin
l_date := to_date(r.masc_date,'dd-mm-yyyy');
exception
when others then
-- print out date that is not in the form dd-mm-yyyy
dbms_output.put_line(r.masc_date);
end;
end loop;
end;