Oracle查询,按小时获取记录计数 [英] Oracle query, get count of records by hour

查看:16
本文介绍了Oracle查询,按小时获取记录计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取每小时的交易计数。通常,这是一个直接的查询,不幸的是,我必须使用的时间戳列不是时间戳,而是varchar2!无论我如何尝试,都会得到无效的月份或无效的数字,具体取决于我使用的格式。

时间戳如:2021-08-08 00:00:52:632

我还执行了以下命令以获取NLS格式:

SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT';

并获取

DD-MON-RRRR.

这是我尝试过的十几个其他选项中最新的一个(我将";group by";注释掉,只是为了显示这个该死的东西)。

select to_char(reqts,'mm/dd/yyyy hh24') DATE_HR
--, count(*)
from idcreqresplog
where logdate > trunc(SYSDATE -2)
and logtypeid in (2,4)
--group by to_char(reqts,'mm/dd/yyyy hh24');

select to_char(reqts, 'yyyy-mm-dd hh24:mi:ss.fff' )
--, count(*) 
FROM 
reqresplog 
WHERE 
logdate > trunc(SYSDATE -2) ;
--group by to_date(reqts, 'yyyy-mm-dd HH4');

我无计可施,需要一些帮助。

推荐答案

假设您的列的格式始终为2021-08-08 00:00:52:63,则对子字符串进行分组,直到第13个字符:

SELECT SUBSTR(reqts, 1, 13) AS date_hr,
       count(*)
FROM   idcreqresplog
WHERE  logdate > trunc(SYSDATE -2)
AND    logtypeid in (2,4)
GROUP BY
       SUBSTR(reqts, 1, 13);

如果确实要转换为日期,则可以在Oracle 12.2中使用TO_TIMESTAMP(string_value DEFAULT NULL ON CONVERSION ERROR, 'YYYY-MM-DD HH24:MI:SS:FF')

SELECT TRUNC(
         TO_TIMESTAMP(
           reqts DEFAULT NULL ON CONVERSION ERROR,
           'YYYY-MM-DD HH24:MI:SS:FF'
         ),
         'HH'
       ) AS date_hr,
       COUNT(*)
FROM   idcreqresplog
WHERE  logdate > trunc(SYSDATE -2)
AND    logtypeid in (2,4)
GROUP BY
       TRUNC(
         TO_TIMESTAMP(
           reqts DEFAULT NULL ON CONVERSION ERROR,
           'YYYY-MM-DD HH24:MI:SS:FF'
         ),
         'HH'
       )

小提琴here

这篇关于Oracle查询,按小时获取记录计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆