Oracle to_date()返回错误的日期+2天

时间:2018-05-14 22:39:46

标签: sql oracle

Oracle to_date()函数返回错误的日期+2天。

请查看截图

enter image description here

为什么会这样?

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;