Sql 如何从Oracle时间戳值中提取时间组件?

Sql 如何从Oracle时间戳值中提取时间组件?,sql,oracle,datetime,Sql,Oracle,Datetime,我正在尝试创建每小时请求的明细。因此,需要忽略TimeStamp对象的日期部分。这就是我一直试图做到的: select trunc(request_time, 'HH'), count(*) from service_request group by trunc(request_time, 'HH'); 这似乎将所有数据分组为一小时的部分,但也按天分组。如何删除日期部分,以获得如下结果: Time Count --------------

我正在尝试创建每小时请求的明细。因此,需要忽略TimeStamp对象的日期部分。这就是我一直试图做到的:

select 
    trunc(request_time, 'HH'),
    count(*)
    
from 
    service_request

group by
    trunc(request_time, 'HH');
这似乎将所有数据分组为一小时的部分,但也按天分组。如何删除日期部分,以获得如下结果:

Time     Count
--------------
00:00        1
01:00        4
02:00        2

你应该能做到

select to_number( to_char( request_time, 'HH24' ) ),
       count(*)
  from service_request
 group by to_number( to_char( request_time, 'HH24' ) );
to_number
可能不是严格必需的,但是对于排序之类的事情,返回数字小时比返回字符串小时更有意义

如果数据类型实际上是一个时间戳,那么您可以对此进行改进

select extract( hour from request_time ),
       count(*)
  from service_request
 group by extract( hour from request_time );

Oracle没有
DATETIME
数据类型。你是说
DATE
(在Oracle中)确实有一个时间组件吗?可能会帮助你提取小时数据类型实际上是时间戳,这是一个漫长的早晨。非常感谢,这非常有效。我去看看to_char函数。@cyraver-因为你更新了你的问题,说它实际上是一个时间戳,所以我更新了我的答案,改为使用
extract
函数。这可能是一个更干净的方法。再次感谢,这是更干净的阅读。有没有办法将小时显示为00:00/01:00而不是0/1?@cyraver-如果您想要字符串,可以使用
来显示字符(trunc(request\u time,'HH'),'HH24:MI')