日期字符串到日期的错误转换

时间:2015-04-21 13:31:42

标签: sql oracle to-date

运行这些语句时:

select to_date('201103270100', 'YYYYMMDDHH24MI') from dual;
select to_date('201103270130', 'YYYYMMDDHH24MI') from dual;

我得到了这些结果:

27/3/2011 1:00:00
27/3/2011 1:30:00

这是正确的。

但是在跑步的时候:

select to_date('201103270200', 'YYYYMMDDHH24MI') from dual

我得到错误的小时

27/3/2011 3:00:00

更多样本:

select to_date('201103270215', 'YYYYMMDDHH24MI') from dual
select to_date('201103270245', 'YYYYMMDDHH24MI') from dual
select to_date('201103270300', 'YYYYMMDDHH24MI') from dual
select to_date('201103270330', 'YYYYMMDDHH24MI') from dual

27/3/2011 3:15:00
27/3/2011 3:45:00
27/3/2011 3:00:00
27/3/2011 3:30:00

当日期是20110326时,我得到了正确的结果。

这很疯狂...... Oracle SQL是否因此转换而欺负我? 欢迎帮助!

1 个答案:

答案 0 :(得分:2)

  

Oracle SQL是否因此转换而欺负我?

除非开发人员试图欺负开发人员,否则甲骨文太愚蠢了,不能欺负开发人员; - )

没有任何理由不能有不同的输出。在欧洲,在2011年,日光节约 2011年3月27日凌晨2:00 开始生效。的 Source is wikipedia

所以,请记住白天节省的时间,让我们看看凌晨2点之后的日期时间结果:

SQL> SELECT to_char(to_date('201103270100', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 01:00:00

SQL> SELECT to_char(to_date('201103270130', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 01:30:00

SQL> SELECT to_char(to_date('201103270200', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 02:00:00

SQL> SELECT to_char(to_date('201103270215', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 02:15:00

SQL> SELECT to_char(to_date('201103270245', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 02:45:00

SQL> SELECT to_char(to_date('201103270300', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 03:00:00

SQL> SELECT to_char(to_date('201103270330', 'YYYYMMDDHH24MI'), 'DD/MM/YYYY HH24:MI:SS') FROM dual;

TO_CHAR(TO_DATE('20
-------------------
27/03/2011 03:30:00

SQL>

如果您提供的数据和示例是正确的,那么这应该是原因。

因此,您应该看到凌晨2:00 的时间部分转移到凌晨3:00 。同样,凌晨2:15 凌晨3:15 。只需为凌晨2:00之后的时间添加一小时