Sql 如何从Oracle时间戳值中提取时间组件?
我正在尝试创建每小时请求的明细。因此,需要忽略TimeStamp对象的日期部分。这就是我一直试图做到的: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 --------------
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')
。