按日期(小时)列出的SQL组
我有一张有“日期”栏的桌子。我想按特定日期按小时分组 您也可以这样做:按日期(小时)列出的SQL组,sql,oracle,Sql,Oracle,我有一张有“日期”栏的桌子。我想按特定日期按小时分组 您也可以这样做: Select TO_CHAR(date,'HH24') from table where date = TO_DATE('20110224', 'YYYYMMDD') group by TO_CHAR(date,'HH24') SELECT TRUNC(datecol, 'HH24') FROM mytable GROUP BY TRUNC(datecol, 'HH24'); 或者,我会建议,但是(我的): 如果请求小时
Select TO_CHAR(date,'HH24')
from table
where date = TO_DATE('20110224', 'YYYYMMDD')
group by TO_CHAR(date,'HH24')
SELECT TRUNC(datecol, 'HH24') FROM mytable
GROUP BY TRUNC(datecol, 'HH24');
或者,我会建议,但是(我的): 如果请求小时、分钟或秒,则expr必须计算为 数据类型时间戳的表达式,带时区的时间戳,时间戳 具有本地时区,或从天到秒的间隔。日期无效 在这里,因为Oracle数据库将其视为ANSI日期数据类型 没有时间字段 因此,结果有点难看:
SELECT EXTRACT (HOUR FROM CAST (m.a_date AS TIMESTAMP)) AS hour_,
COUNT (*) AS count_
FROM MY_TABLE m
GROUP BY EXTRACT (HOUR FROM CAST (m.a_date AS TIMESTAMP));
如果日期列包含一个
DateTime
,那么如何按“日期”列中的部分数据分组?@Nick:在Oracle中,日期包括时间。另一个优点是TRUNC
返回的数据类型是日期,因此,它总是正确排序-而TO_CHAR
将使用字母排序,这并不总是正确的,取决于使用的日期/时间格式。如果需要日期/小时(TRUNC(datecol,'MM-DD-yyyyy HH24')
给出错误:SQL错误[1898][22008]:ORA-01898:精度说明符太多
)@ryvantage,您不能同时在多个级别截断-如果您想截断到最近的一天,请使用DD
,如果您想截断到最近的一小时(根据OP),请根据我的回答使用HH24
。这很有意义。我只是想找到一个不同的答案。@Wassadamo,那可能是因为您没有按表达式将所选表达式与组进行匹配。TO_CHAR
ed日期排序不正确。请考虑使用<代码> Tunc < /代码>。
SELECT EXTRACT (HOUR FROM CAST (m.a_date AS TIMESTAMP)) AS hour_,
COUNT (*) AS count_
FROM MY_TABLE m
GROUP BY EXTRACT (HOUR FROM CAST (m.a_date AS TIMESTAMP));