【问题标题】:Create a table of dates in rows在行中创建日期表
【发布时间】:2013-03-19 14:43:46
【问题描述】:

我有一个 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|
+-----+--------------------+

【问题讨论】:

    标签: oracle plsql date-arithmetic


    【解决方案1】:

    您并没有向我们详细介绍,但这是您想要的结构:

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

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

    【讨论】:

      【解决方案2】:

      您需要从日期基线开始:

      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 分钟;

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多