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

时间:2018-06-22 05:47:11

标签: sql oracle oracle-apex

我有一张桌子,其中有星期天到饱和的“医生开始”和“结束时间”。 我想创建15分钟的时隙。

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

  • 第2行:trunc函数,应用于日期值,返回当天(午夜)的“开始”。添加15 / (24*60)会增加15分钟(因为一天中有24小时,而每小时有60分钟)。将{15}与level乘以一个“循环”,即将15 x 15 x 15 ...分钟加到先前的值上。
  • 第4行:类似于第2行,但可以确保将一天(24小时* 60分钟)划分为15分钟的时段
  • 第6行:开始时间很短
  • 第7行:结束时间仅增加了15分钟start_time
  • 第9行:仅返回10到16个小时之间的时间(您在02:15 AM没有患者,对吧?)

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>