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

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".

谢谢

最佳答案

您的代码可以在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

当然,有一个月的天数并不总是相同的:2月
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

关于sql - Oracle SQL转换功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8325165/

10-10 04:03