Oracle查询,按小时获取记录计数 [英] Oracle query, get count of records by hour
本文介绍了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屋!
查看全文