【问题标题】:How to generate series for date range with minutes interval in oracle?如何在 oracle 中以分钟间隔生成日期范围的系列?
【发布时间】:2019-08-28 10:24:52
【问题描述】:

在 Postgres 下面的查询使用 generate_series 函数工作

SELECT dates 
FROM generate_series(CAST('2019-03-01' as TIMESTAMP), CAST('2019-04-01' as TIMESTAMP),  interval '30 mins') AS dates

以下查询也适用于 Oracle,但仅适用于日期间隔

select to_date('2019-03-01','YYYY-MM-DD') + rownum -1 as dates 
from all_objects 
where rownum <= to_date('2019-03-06','YYYY-MM-DD')-to_date('2019-03-01','YYYY-MM-DD')+1

SELECT dates 
FROM generate_series(CAST('2019-03-01' as TIMESTAMP), CAST('2019-04-01' as TIMESTAMP),  interval '30 mins') AS dates

我希望以下查询在 Oracle 中得到相同的结果

SELECT dates 
FROM generate_series(CAST('2019-03-01' as TIMESTAMP), CAST('2019-04-01' as TIMESTAMP),  interval '30 mins') AS dates

【问题讨论】:

    标签: sql oracle11g oracle10g


    【解决方案1】:

    使用分层查询:

    SELECT DATE '2019-03-01' + ( LEVEL - 1 ) * INTERVAL '30' MINUTE AS dates
    FROM   DUAL
    CONNECT BY DATE '2019-03-01' + ( LEVEL - 1 ) * INTERVAL '30' MINUTE <= DATE '2019-04-01';
    

    输出

    |日期 | | :----------------- | | 2019-03-01 00:00:00 | | 2019-03-01 00:30:00 | | 2019-03-01 01:00:00 | | 2019-03-01 01:30:00 | | 2019-03-01 02:00:00 | | 2019-03-01 02:30:00 | | 2019-03-01 03:00:00 | | 2019-03-01 03:30:00 | | 2019-03-01 04:00:00 | | 2019-03-01 04:30:00 | | 2019-03-01 05:00:00 | | 2019-03-01 05:30:00 | ... | 2019-03-31 19:30:00 | | 2019-03-31 20:00:00 | | 2019-03-31 20:30:00 | | 2019-03-31 21:00:00 | | 2019-03-31 21:30:00 | | 2019-03-31 22:00:00 | | 2019-03-31 22:30:00 | | 2019-03-31 23:00:00 | | 2019-03-31 23:30:00 | | 2019-04-01 00:00:00 |

    db小提琴here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2018-06-17
      • 1970-01-01
      相关资源
      最近更新 更多