有人可以解释为什么这段代码
to_date('25-JAN', 'DD-MON')
有效,但不是
to_date(to_char(date_of_birth, 'DD-MON'), 'DD-MON')
正在运行
to_char(date_of_birth, 'DD-MON')
这是它自己的作品的内部函数,但后者抛出
"ORA-01839 error: date not valid for month specified".
由于
答案 0 :(得分:6)
您的代码可以在 1月25日作为日期正常运行。问题是日期需要一年。所以当你这样做时:
TO_DATE('25-JAN', 'DD-MON')
... Oracle需要建立一个完整的日期并假设当前年份。证明:
SELECT TO_CHAR(TO_DATE('25-JAN', 'DD-MON'))
FROM DUAL
...打印:
25/01/2011 00:00:00
当然,有一个月并不总是有相同的天数:二月
SELECT TO_CHAR(TO_DATE('29-FEB-2000', 'DD-MON-YYYY'))
FROM DUAL
-- 29/02/2000 00:00:00
SELECT TO_CHAR(TO_DATE('29-FEB', 'DD-MON'))
FROM DUAL
-- ORA-01839: date not valid for month specified
答案 1 :(得分:0)
您的表格中某个月的日期无效, 例如:
SQL> select date '1996-01-29' + interval '1' month as col_1
2 , date '1997-01-29' + interval '1' month as col_2
3 , date '1997-08-11' - interval '3' month as col_3
4 from dual;
, date '1997-01-29' + interval '1' month as col_2
*
ERROR at line 2:
ORA-01839: date not valid for month specified
SQL>
SQL> select date '1996-01-29' + interval '1' month as col_1
2 , date '1997-01-28' + interval '1' month as col_2
3 , date '1997-08-11' - interval '3' month as col_3
4 from dual;
Enter...
29-02-1996 28-02-1997 11-05-1997
1 row selected.
查看表格中的无效日期。