0

我有一个查询,它创建一个包含日期后接下来 24 小时内每一分钟的列。

(SELECT   TO_DATE ('05/07/2012 15:00:00', 'DD/MM/YYYY HH24:MI:SS')
                 + (ROWNUM / 1440)
                    AS foo
          FROM   (    SELECT   (ROWNUM - 1)
                        FROM   DUAL
                  CONNECT BY   LEVEL <= 1336));

foo 的第一行是 15:01。这对我来说似乎是错误的。

所以我自己运行了子查询:

SELECT (ROWNUM - 1) FROM DUAL CONNECT BY LEVEL <= 1336;

它按预期返回 0,1,2,3,4 等。于是我再次运行子查询但除以1440,第一个值还是0。

所以我认为可能在时间戳中添加 0 会导致一些奇怪,所以我跑了

SELECT TO_DATE ('05/07/2012 15:00:00', 'DD/MM/YYYY HH24:MI:SS') + (0/1440) FROM DUAL;

仍然得到05/06/2012 15:00:00

那么为什么再次组合这个备份会导致第一个值是 15:01?

4

1 回答 1

2

原因外部查询中的 ROWNUM 第一次是 1,而不是零。

于 2012-07-05T14:42:05.690 回答