Oracle SQL - оператор TO_CHAR и TO_DATE

Я работаю в БД Oracle и пытаюсь конвертировать с 12 часов до 24 часов.

В настоящее время я обновил HH до HH24, и я до сих пор вижу все 24 часа, и фактически он тянет только первые 12 часов дня. Ниже приведен мой рабочий запрос без ошибок и выдачи правильных результатов, кроме остальных пропущенных 12 часов.

SELECT
CASE(EXTRACT(HOUR FROM a.TIME)) 
WHEN 1 THEN '1'
WHEN 2 THEN '2'
WHEN 3 THEN '3'
WHEN 4 THEN '4'
WHEN 5 THEN '5'
WHEN 6 THEN '6'
WHEN 7 THEN '7'
WHEN 8 THEN '8'
WHEN 9 THEN '9'
WHEN 10 THEN '10'
WHEN 11 THEN '11'
WHEN 12 THEN '12'
WHEN 13 THEN '13'
WHEN 14 THEN '14'
WHEN 15 THEN '15'
WHEN 16 THEN '16'
WHEN 17 THEN '17'
WHEN 18 THEN '18'
WHEN 19 THEN '19'
WHEN 20 THEN '20'
WHEN 21 THEN '21'
WHEN 22 THEN '22'
WHEN 23 THEN '23'
WHEN 24 THEN '24'
ELSE 'OTHERS' END AS "ENTRY_TIME_HOUR",
COUNT(*) AS "TOTAL_WITHIN_THE_HOUR"

 FROM Table1 a 
 WHERE 
 a.TIME >= TO_DATE('2018/01/05 01:00:01', 'YYYY/MM/DD HH24:MI:SS') 
 AND a.TIME <= TO_DATE('2018/01/05 12:59:59', 'YYYY/MM/DD HH24:MI:SS')
 GROUP BY EXTRACT(HOUR FROM a.TIME)

Приведенный выше запрос выдаст что-то вроде ниже, но только до 12 (должно быть 1-24)

ENTRY_TIME_HOUR  TOTAL_WITHIN_THE_HOUR
   11                    68
   8                      3
   9                     83
  10                     26
  12                     62

Кроме того, я нашел TO_CHAR полезным, но я не смог запустить TO_CHAR и TO_DATE вместе. Конечная цель - СУММИТЬ все выходные данные по ВРЕМЕНИ за данный час. Вывод выдаст 24 строки с общим количеством для каждого часа.

Ниже приведен отдельный запрос, который выводит ПОЛНОЕ время (а не только час ЧЧ):

SELECT
to_char(a.TIME, 'DD/MM/YYYY HH24:MI:SS') AS "TIME in 24"
FROM TABLE a 
WHERE 
AND a.TIME >= TO_DATE('2018/01/05 01:00:01', 'YYYY/MM/DD HH24:MI:SS') 
AND a.TIME <= TO_DATE('2018/01/05 23:59:59', 'YYYY/MM/DD HH24:MI:SS')

Приведенный выше запрос будет выглядеть следующим образом:

 05/01/2018 15:00:40
 05/01/2018 16:01:45
 05/01/2018 09:59:51
 05/01/2018 10:04:58

Однако я не могу объединить запросы TO_CHAR и TO_DATE вместе, не сталкиваясь с несколькими проблемами. Можно ли объединить второй запрос с первым запросом, чтобы предоставить результаты подсчета времени за полные 24 часа дня?

Спасибо

2 ответа

Во-первых, часы дня идут от 0 до 23, а не от 1 до 24.

Во-вторых, вы усложняете простые вещи. Что случилось с

select to_char(a.time, 'HH24') theHour
, count(*) occurrences

from yourTable a

where a.time >= date '2018-01-05'
and a.time < date '2018-01-06'
group by to_char(a.time, 'HH24')

Это слишком долго для комментария. Начните с изучения использования DATE а также TIMESTAMP ключевые слова. Гораздо проще для ввода однозначных временных меток:

WHERE a.TIME >= TIMESTAMP '2018-01-05 01:00:01' AND
      a.TIME <= TIMESTAMP '2018-01-05 12:59:59'

Написано так, гораздо понятнее, что вы выбираете только часы от 1 до 12, поэтому вы получаете только эти часы. Изменить WHERE условия, и вы можете получить дополнительные часы.

Другие вопросы по тегам