如何从Oracle表组中按小时检索数据

ercv8c1e  于 2023-03-29  发布在  Oracle
关注(0)|答案(2)|浏览(284)

问题陈述:我的查询返回的数据有created_date,这意味着记录何时被创建。这列是一个日期类型,结果中包含小时。
我想发布按日期分组的数据,按小时分布。
样品结果:

目前我正在使用以下查询获取按天计算的分布,

SELECT TRUNC(CREATED_DATE),COUNT(*) FROM IMAGE_HISTORY
WHERE CREATED_DATE >= SYSDATE-7
GROUP BY TRUNC(CREATED_DATE)
ORDER BY TRUNC(CREATED_DATE) ASC

结果:

ih99xse1

ih99xse11#

你可以使用TRUNC(CREATED_DATE, 'HH')在几小时后截断所有内容,如下所示:

SELECT TRUNC(CREATED_DATE, 'HH'),COUNT(*) FROM IMAGE_HISTORY
WHERE CREATED_DATE >= SYSDATE-7
GROUP BY TRUNC(CREATED_DATE, 'HH')
ORDER BY 1 ASC
0yg35tkg

0yg35tkg2#

如果你想要的是一天中按小时分组(例如,结果中最多有24行),那么使用TO_CHAR而不是TRUNC

SELECT TO_CHAR(CREATED_DATE, 'HH24'),COUNT(*) 
  FROM IMAGE_HISTORY
 WHERE CREATED_DATE >= SYSDATE-7
 GROUP BY TO_CHAR(CREATED_DATE, 'HH24')
 ORDER BY 1 ASC

TO_CHAR使用指定的模式格式化字符串,因此如果指定 only hours(HHHH24),则将得到所有内容。没有day,只有hour(作为字符串)。
但如果你想记录每一天每一小时(7*24 = 168行),那么TRUNC(CREATED_DATE,'HH')是正确的。TRUNC将低于指定掩码的时间部分归零,并将结果作为日期返回。可以将其视为“向下舍入到最近的X”。我想你也可以这样做TO_CHAR(CREATE_DATE,'YYYY-MM-DD HH24'),但字符串不如真实的日期可取,因此,如果您希望保留日期,TRUNC方法是首选。

相关问题