Oracle SQL转换函数

And*_*mai 2 sql oracle

有人可以解释为什么这个代码

to_date('25-JAN', 'DD-MON') 
Run Code Online (Sandbox Code Playgroud)

工作,但没有

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".
Run Code Online (Sandbox Code Playgroud)

谢谢

Álv*_*lez 6

您的代码在1月25日作为日期正常运行.问题是日期需要一年.所以当你这样做时:

TO_DATE('25-JAN', 'DD-MON')
Run Code Online (Sandbox Code Playgroud)

... Oracle需要建立一个完整的日期并假设当前年份.证明:

SELECT TO_CHAR(TO_DATE('25-JAN', 'DD-MON'))
FROM DUAL
Run Code Online (Sandbox Code Playgroud)

...打印:

25/01/2011 00:00:00 
Run Code Online (Sandbox Code Playgroud)

当然,有一个月并不总是有相同的天数:二月

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
Run Code Online (Sandbox Code Playgroud)