可能有人请解释为什么这代码的Oracle SQL转换功能
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".
感谢
可能有人请解释为什么这代码的Oracle SQL转换功能
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".
感谢
你有一个无效的一天,特定月份在你的餐桌, 例如:
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.
看看你的表内的无效天一个月。
您的代码可以正常工作,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
非常感谢,我做了一个搜索(在OE模式中的客户表date_of_birth列),并发现'29 -FEB',这意味着错误是2011年的结果不是一个闰年,愚蠢的我。我很高兴,现在我知道在处理日期数据类型列时应该注意些什么。再次感谢。 –
@AndrewMudamai欢迎您。随时将问题标记为已回答,以便将来可以帮助其他人。 –
感谢Nammari,我是能够在我尝试从中提取数据的列中找到'29 -FEB'。从现在开始我会留意这种情况。 –