0

我有一个 Oracle 数据库;我想创建一个包含两列的表,一列包含 id,另一列包含行中递增的日期。我想在我的 PL/SQL 代码中指定限制日期,并且代码将生成两个限制日期(从和到)之间的行。

这是一个示例输出结果:

+-----+--------------------+
|  id |dates               |
+-----+--------------------+
|  1  |01/02/2011 04:00:00 |
+-----+--------------------+
|  2  |01/02/2011 05:00:00 |
+-----+--------------------+
|  3  |01/02/2011 06:00:00 |
+-----+--------------------+
|  4  |01/02/2011 07:00:00 |
+-----+--------------------+
|  5  |01/02/2011 08:00:00 |
....
...
..
| 334 |05/03/2011 023:00:00|
+-----+--------------------+
4

2 回答 2

2

你并没有完全用细节淹没我们,但这是你想要的那种构造:

select level as id
       , &&start_date + ((level-1) * (1/24) as dates
from dual
connect by level <= ((&&end_date - &&start_date)*24)
/

这假设您的输入值是整天,如果您的开始或结束日期包含时间组件,您将需要调整数学。

于 2013-03-28T23:57:36.427 回答
0

您需要从日期基线开始:

vBaselineDate := TRUNC(SYSDATE);

或者

vBaselineDate := TO_DATE('28-03-2013 12:00:00', 'DD-MM-YYYY HH:MI:SS');

然后通过添加一天的分数来增加基线,具体取决于您想要的范围有多大,例如:1 分钟、1 小时等。

FOR i IN 1..334 LOOP
  INSERT INTO mytable
    (id, dates)
    VALUES
      (i, (vBaselineDate + i/24));
END LOOP;
COMMIT;

1/24 = 1 小时。1/1440 = 1 分钟;

希望这可以帮助。

于 2013-03-28T23:58:03.270 回答