每天将时间戳分为小时间隔

时间:2018-10-18 19:02:35

标签: sql oracle oracle11g

我有一个数据表,如下所示。 CASE_IDNUMBER类型,而TIMESTAMPTIMESTAMP类型。


CASE_ID        TIMESTAMP
1              09-OCT-18 12.28.48.655904000
2              10-OCT-18 08.14.38.909903000
3              11-OCT-18 02.46.55.755881000
4              12-OCT-18 14.17.44.103901150

我希望有一条select语句,在上面的数据中,我将第三列TIME_INTERVAL添加到返回的结果中,以便将其表示为:


CASE_ID        TIMESTAMP                         TIME_INTERVAL
1              09-OCT-18 12.28.48.655904000      09-OCT-18 12:00-13:00
2              10-OCT-18 08.14.38.909903000      10-OCT-18 08:00-09:00
3              11-OCT-18 02.46.55.755881000      11-OCT-18 02:00-03:00
4              12-OCT-18 14.17.44.103901150      12-OCT-18 14:00-15:00

基本上在TIME_INTERVAL中,我从TIMESTAMP进行检查,以查看时间戳记落入的小时间隔并将其返回,因此,如果某笔交易是在Oct 18 2018的{​​{1}},{ {1}}列将显示为20.20.15.216901550,因为时间介于TIME_INTERVAL18-OCT-18 20:00-21:00之间。有帮助吗?

2 个答案:

答案 0 :(得分:2)

您没有给我们提供简单的方法来尝试此操作,但是以下方法应该可以工作:

select
       case_id
     , TIMESTAMP
     , extract(hour from TIMESTAMP) as started_at
     , extract(hour from TIMESTAMP)+1

上面的两个值构建一个不错的范围字符串留给读者练习。

答案 1 :(得分:1)

您可以使用:

select t.*, 
       to_char(trunc(cast ( timestamp  as date )     , 'hh24'), 
                    'dd-MON-rr hh24:mi','nls_date_language=english')
       ||' - '||
       to_char(trunc(cast ( timestamp  as date )+1/24, 'hh24'),
                              'hh24:mi')
       as TIME_INTERVAL           
  from tab t;