1

运行这些语句时:

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 是否通过这种转换来欺负我?欢迎帮助!

4

1 回答 1

2

Oracle SQL 在这种转换中欺负我吗?

Oracle 太笨了,不能欺负开发人员,除非开发人员试图欺负它;-)

没有任何理由不能有不同的输出。在欧洲,在 2011 年,夏令时从2011 年 3 月 27 日凌晨 2:00开始生效。来源是维基百科

因此,请记住夏令时,让我们看看2:00 AM之后日期时间的结果:

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 AM的时间部分转换为3:00 AM。同样,2:15 AM将是3:15 AM。对于凌晨 2:00 之后的时间,只需将时间增加一个小时。

于 2015-04-21T13:54:39.603 回答