Sql 将日期拆分为四分之一小时

Sql 将日期拆分为四分之一小时,sql,impala,Sql,Impala,我有一个要求,我需要转换两个记录,这两个记录的时间跨度为一整天(24小时) 表结构是 start_time | end_time |local_start_time |local_endtime | 2015-01-01 3:00:00 | 2015-01-01 23:59:59 | 2015-01-01 4:00:00 | 2015-02-01 01:59:59 2015-02-01 12:00:00| 2015-02-01 2:59:59

我有一个要求,我需要转换两个记录,这两个记录的时间跨度为一整天(24小时)

表结构是

 start_time         | end_time            |local_start_time     |local_endtime |
 2015-01-01 3:00:00 | 2015-01-01 23:59:59 |  2015-01-01 4:00:00 | 2015-02-01 01:59:59
 2015-02-01 12:00:00| 2015-02-01 2:59:59  | 2015-02-01 13:00:00 |2015-02-01 3:59:59
根据这两条记录,我需要在24小时内创建96条记录。每一条记录都应该是一刻钟的一段时间

 Eg:
 start_time         |     end_time      |local_start_time   |local_endtime    | Quarter_hour
 2015-01-01 3:00:00 | 2015-01-01 3:14:59|2015-01-01 4:00:00 | 2015-01-01 4:14:59 | 1
 2015-01-01 3:15:00 | 2015-01-01 3:29:59|2015-01-01 4:15:00 | 2015-01-01 4:29:59 | 2
以此类推,直到每1天的四分之一小时变成96小时


我不知道如何实施这一点。任何帮助都会非常有用。衷心感谢,我从来没有使用过黑斑羚,但是如果我只想使用SQL语句的话。。我的方法可以是:

我每小时需要25美分:

select '00:00' qstart, '14:59' qend union
select '15:00' qstart, '29:59' qend union
select '30:00' qstart, '44:59' qend union
select '45:00' qstart, '59:59' qend 
我需要几个小时!(您是否有Oralce CONNECT条款的替代方案?)

如果你用这两句话连接起来

select hhour || ':' || qstart as hqstart, hhour || ':' || qend as hqend, ordinal
from
(select '00' hhour, 1 ordinal union
select '01' hhour, 2 ordinal union
select '02' hhour, 3 ordinal union
select '03' hhour, 4 ordinal union
select '04' hhour, 5 ordinal union
select '05' hhour, 6 ordinal union
select '06' hhour, 7 ordinal union
select '07' hhour, 8 ordinal union
select '08' hhour, 9 ordinal union
select '09' hhour, 10 ordinal union
select '10' hhour, 11 ordinal union
select '11' hhour, 12 ordinal union
select '12' hhour, 13 ordinal union
select '13' hhour, 14 ordinal union
select '14' hhour, 15 ordinal union
select '15' hhour, 16 ordinal union
select '16' hhour, 17 ordinal union
select '17' hhour, 18 ordinal union
select '18' hhour, 19 ordinal union
select '19' hhour, 20 ordinal union
select '20' hhour, 21 ordinal union
select '21' hhour, 22 ordinal union
select '22' hhour, 23 ordinal union
select '23' hhour, 24 ordinal) Hours,
(select '00:00' qstart, '14:59' qend union
select '15:00' qstart, '29:59' qend union
select '30:00' qstart, '44:59' qend union
select '45:00' qstart, '59:59' qend ) Quarters order by ordinal, qstart
你有96张你想要的唱片

hqstart     hqend       ordinal
00:00:00    00:14:59    1
00:15:00    00:29:59    1
00:30:00    00:44:59    1
00:45:00    00:59:59    1
01:00:00    01:14:59    2
01:15:00    01:29:59    2
01:30:00    01:44:59    2
01:45:00    01:59:59    2
...         ...         .
然后,如果您想选择2次之间的四分之一。。。比如说。。14:09:00至15:06:30的季度:

select * from 
(
select hhour || ':' || qstart as hqstart, hhour || ':' || qend as hqend, ordinal
from
   (select '00' hhour, 1 ordinal union
    select '01' hhour, 2 ordinal union
    select '02' hhour, 3 ordinal union
    select '03' hhour, 4 ordinal union
    select '04' hhour, 5 ordinal union
    select '05' hhour, 6 ordinal union
    select '06' hhour, 7 ordinal union
    select '07' hhour, 8 ordinal union
    select '08' hhour, 9 ordinal union
    select '09' hhour, 10 ordinal union
    select '10' hhour, 11 ordinal union
    select '11' hhour, 12 ordinal union
    select '12' hhour, 13 ordinal union
    select '13' hhour, 14 ordinal union
    select '14' hhour, 15 ordinal union
    select '15' hhour, 16 ordinal union
    select '16' hhour, 17 ordinal union
    select '17' hhour, 18 ordinal union
    select '18' hhour, 19 ordinal union
    select '19' hhour, 20 ordinal union
    select '20' hhour, 21 ordinal union
    select '21' hhour, 22 ordinal union
    select '22' hhour, 23 ordinal union
    select '23' hhour, 24 ordinal) Hours,
   (select '00:00' qstart, '14:59' qend union
    select '15:00' qstart, '29:59' qend union
    select '30:00' qstart, '44:59' qend union
    select '45:00' qstart, '59:59' qend ) Quarters order by ordinal
) AllQuarters
where (hqstart >= '14:09:00' and hqstart < '15:06:30') or
      (hqend  >=  '14:09:00' and hqend   < '15:06:30')
order by ordinal, hqstart, hqend;
您可以找到一个SQLFiddle示例

注意本例中的
from dual
子句,它仅适用于ORACLE dbms

您使用的是哪种数据库管理系统?(不幸的是,许多dbms产品在日期/时间方面远远不符合ANSI SQL…)
hqstart     hqend       ordinal
00:00:00    00:14:59    1
00:15:00    00:29:59    1
00:30:00    00:44:59    1
00:45:00    00:59:59    1
01:00:00    01:14:59    2
01:15:00    01:29:59    2
01:30:00    01:44:59    2
01:45:00    01:59:59    2
...         ...         .
select * from 
(
select hhour || ':' || qstart as hqstart, hhour || ':' || qend as hqend, ordinal
from
   (select '00' hhour, 1 ordinal union
    select '01' hhour, 2 ordinal union
    select '02' hhour, 3 ordinal union
    select '03' hhour, 4 ordinal union
    select '04' hhour, 5 ordinal union
    select '05' hhour, 6 ordinal union
    select '06' hhour, 7 ordinal union
    select '07' hhour, 8 ordinal union
    select '08' hhour, 9 ordinal union
    select '09' hhour, 10 ordinal union
    select '10' hhour, 11 ordinal union
    select '11' hhour, 12 ordinal union
    select '12' hhour, 13 ordinal union
    select '13' hhour, 14 ordinal union
    select '14' hhour, 15 ordinal union
    select '15' hhour, 16 ordinal union
    select '16' hhour, 17 ordinal union
    select '17' hhour, 18 ordinal union
    select '18' hhour, 19 ordinal union
    select '19' hhour, 20 ordinal union
    select '20' hhour, 21 ordinal union
    select '21' hhour, 22 ordinal union
    select '22' hhour, 23 ordinal union
    select '23' hhour, 24 ordinal) Hours,
   (select '00:00' qstart, '14:59' qend union
    select '15:00' qstart, '29:59' qend union
    select '30:00' qstart, '44:59' qend union
    select '45:00' qstart, '59:59' qend ) Quarters order by ordinal
) AllQuarters
where (hqstart >= '14:09:00' and hqstart < '15:06:30') or
      (hqend  >=  '14:09:00' and hqend   < '15:06:30')
order by ordinal, hqstart, hqend;
hqstart     hqend       ordinal
14:00:00    14:14:59    15
14:15:00    14:29:59    15
14:30:00    14:44:59    15
14:45:00    14:59:59    15
15:00:00    15:14:59    16