在 Oracle 中生成具有 2 个日期之间时间间隔的行

Posted

技术标签:

【中文标题】在 Oracle 中生成具有 2 个日期之间时间间隔的行【英文标题】:Generate rows with time intervals between 2 dates in Oracle 【发布时间】:2018-06-22 05:47:11 【问题描述】:

我有一张表格,其中给出了周日到周六的“医生开始”和“结束时间”。 我想创建 15 分钟的时间段。

在此基础上,患者点击日历日期时间间隔,显示已预订的时段。

【问题讨论】:

祝你好运。除非!你有一个真正的问题。 你不明白的地方 我明白,你写了什么,但是我没有看到任何问题/细节。看看 - How to Ask 和 MVCE @SudiptaMondal 现在附上图片。你现在可以理解真正的问题了 @arman - please post text rather than images. 【参考方案1】:

以下示例显示了如何将时间分成 15 分钟的片段。它使用分层查询。一点解释:

第 2 行:trunc 函数,应用于日期值,返回当天(午夜)的“开始”。添加15 / (24*60) 会增加 15 分钟(因为一天有 24 小时,一小时有 60 分钟)。将 15 乘以 level 就像一个“循环”,即将 15×15×15 ... 分钟加上之前的值。 第 4 行:类似于第 2 行,但它确保将一天(24 小时 * 60 分钟)分为 15 分钟部分 第 6 行:开始时间很简单 第 7 行:结束时间在start_time 上增加了 15 分钟 第 9 行:仅返回 10 到 16 小时之间的时间(凌晨 02:15 没有患者,对吧?)
SQL> with fifteen as
  2    (select trunc(sysdate) + (level * 15)/(24*60) c_time
  3     from dual
  4     connect by level <= (24*60) / 15
  5    )
  6  select to_char(c_time, 'hh24:mi') start_time,
  7         to_char(c_time + 15 / (24 * 60), 'hh24:mi') end_time
  8  from fifteen
  9  where extract(hour from cast (c_time as timestamp)) between 10 and 15;

START_TIME END_TIME
---------- ----------
10:00      10:15
10:15      10:30
10:30      10:45
10:45      11:00
11:00      11:15
11:15      11:30
11:30      11:45
11:45      12:00
12:00      12:15
12:15      12:30
12:30      12:45
12:45      13:00
13:00      13:15
13:15      13:30
13:30      13:45
13:45      14:00
14:00      14:15
14:15      14:30
14:30      14:45
14:45      15:00
15:00      15:15
15:15      15:30
15:30      15:45
15:45      16:00

24 rows selected.

SQL>

【讨论】:

以上是关于在 Oracle 中生成具有 2 个日期之间时间间隔的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数

在 PostgreSQL 中生成两个日期之间的时间序列

在Android中生成两个日期之间的日期

在熊猫中生成给定范围内的随机日期

在python中生成具有三个类的3个圆形数据集

在 HIVE 中生成日期系列时,将有效日期限制为今天