Ответ 1
Select TO_CHAR(date,'HH24')
from table
where date = TO_DATE('20110224', 'YYYYMMDD')
group by TO_CHAR(date,'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');
select to_char(datecol,'HH24') thehour, count(*) count_in_hour
from tbl
where datecol = date '20110224'
group by to_char(datecol,'HH24')
order by thehour asc
В качестве альтернативы я бы предложил EXTRACT (datetime), но (empahsis mine):
Если запрашивается HOUR, MINUTE или SECOND, тогда expr должен оценивать выражение типа данных TIMESTAMP, TIMESTAMP с временной зоной, TIMESTAMP С ЛОКАЛЬНОЙ ЗЕМНОЙ ЗОНЕЙ, или ИНТЕРВАЛ ДЕНЬ ВТОРОЙ. DATE недействительна здесь, поскольку Oracle Database рассматривает его как тип данных ANSI DATE, который не имеет временных полей.
Следовательно, результат немного уродлив:
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));