我有一个数据表,如下所示。 CASE_ID
是NUMBER
类型,而TIMESTAMP
是TIMESTAMP
类型。
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_INTERVAL
和18-OCT-18 20:00-21:00
之间。有帮助吗?
答案 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;