Oracle to_date()函数返回错误的日期+2天。
请查看截图
为什么会这样?
答案 0 :(得分:2)
我无法复制您的结果,但即使使用了日期文字,我也确实在SQL Fiddle上获取了1-MAY-18
的错误日期(但如果我使用的是Oracle 11g实例或{{3网站):
Oracle 18c on Oracle's Live SQL
查询1 :
SELECT TO_DATE( '1-MAY-18', 'DD-MON-YYYY' ),
DATE '0018-05-01',
TO_DATE( '1-MAY-18', 'DD-MON-RR' )
FROM DUAL
<强> SQL Fiddle 强>:
| TO_DATE('1-MAY-18','DD-MON-YYYY') | DATE'0018-05-01' | TO_DATE('1-MAY-18','DD-MON-RR') |
|-----------------------------------|----------------------|---------------------------------|
| 0018-04-29T00:00:00Z | 0018-04-29T00:00:00Z | 2018-05-01T00:00:00Z |
您会注意到YYYY
格式模型和数值18
给出了年18 AD
而非2018 AD
。要解决此问题,您需要提供整个4位数年份或使用RR
格式模型。
答案 1 :(得分:1)
问题是您与提供的格式不匹配。
提供的年份为18,TO_DATE预计为2018年。
以下应能正常工作:
select to_date('11-MAY-18', 'DD-MON-YY') from dual;
OR
select to_date('11-MAY-2018', 'DD-MON-YYYY') from dual;