Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按日期(小时)列出的SQL组_Sql_Oracle - Fatal编程技术网

按日期(小时)列出的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));