ORA-08143(非有效月份)

时间:2014-05-23 06:16:57

标签: oracle

我在表中有一个日期列,它是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"

1 个答案:

答案 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;