Как сравнить по времени в таблицах, отбросив минуты и секунды до часов?
Есть 2 таблицы нужно их сравнить по 2 столбца одинаковым в названии
Select t1.ID, t1.TIME from TABLE_1 t1 JOIN TABLE_2 t2 ON t1.ID=t2.ID and t1.TIME = t2.TIME |
Select t1.ID, t1.TIME from TABLE_1 t1 JOIN TABLE_2 t2 ON t1.ID=t2.ID and t1.TIME = t2.TIME
Но одно но, в первой таблице у меня t1.time 31-07-2022 11:42:05 а t2.time 31-07-2022 11:00:00 (только часы)
необходимо сравнить по часовым значениям, отбросив минуты и секунды
Дополнительно:
Select t1.ID, t1.TIME from TABLE_1 t1 JOIN TABLE_2 t2 ON t1.ID=t2.ID and to_char(t1.TIME, 'DD.MM.YYYY HH24') = to_char(t2.TIME, 'DD.MM.YYYY HH24') |
Select t1.ID, t1.TIME from TABLE_1 t1 JOIN TABLE_2 t2 ON t1.ID=t2.ID and to_char(t1.TIME, 'DD.MM.YYYY HH24') = to_char(t2.TIME, 'DD.MM.YYYY HH24')
Вариант 2 (возможно, пригодится при оптимизации, так как на выходе сравниваются значения в типе дата время, а не строк):
... and trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24') |
... and trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24')
PS: Хорошо бы еще индекс создать под этот формат времени для колонок t1.TIME и t2.TIME, тогда запрос будет всегда производителен.
- and trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24') то что надо....
а как мне вывести еще + 2 значения к сравнению к таблице t1 добавить 3 часа
ПРимер
ID t1.time t2.time t2.KPI
2 2022-07-26 16:48:05 2022-07-26 16:00:00 10
2 2022-07-26 16:48:05 2022-07-26 17:00:00 20
2 2022-07-26 16:48:05 2022-07-26 18:00:00 30
2 2022-07-26 16:48:05 2022-07-26 19:00:00 30 -
а как мне вывести еще + 2 значения к сравнению к таблице t1
Непонятно.
добавить 3 часа
t1.TIME + (3 / 24)
Операции сложения и вычитания в oracle проводятся в суточных единицах. - получилось вот так
Select t1.* ,KPI from ( select ID, trunc(TIME, 'hh24') time from table1 Union all select ID, trunc(TIME+1/24, 'hh24') time from table1 Union all select , ID trunc (TIME+2/24, 'hh24') time from table1) T1 JOIN table2 t2 ON t1.ID = t2.ID and T1.TIME = t2.TIME
Select t1.* ,KPI from ( select ID, trunc(TIME, 'hh24') time from table1 Union all select ID, trunc(TIME+1/24, 'hh24') time from table1 Union all select , ID trunc (TIME+2/24, 'hh24') time from table1) T1 JOIN table2 t2 ON t1.ID = t2.ID and T1.TIME = t2.TIME
- Тогда уж так:
Select t1.* ,KPI from table1 T1 JOIN table2 t2 ON t1.ID = t2.ID and t2.TIME >= trunc (t1.TIME, 'hh24') and t2.TIME <= trunc (t1.TIME + 2/24, 'hh24')
Select t1.* ,KPI from table1 T1 JOIN table2 t2 ON t1.ID = t2.ID and t2.TIME >= trunc (t1.TIME, 'hh24') and t2.TIME <= trunc (t1.TIME + 2/24, 'hh24')
или так:
Select t1.* , KPI from table1 T1 JOIN table2 t2 ON t1.ID = t2.ID and t2.TIME BETWEEN trunc (t1.TIME, 'hh24') and trunc (t1.TIME + 2/24, 'hh24')
Select t1.* , KPI from table1 T1 JOIN table2 t2 ON t1.ID = t2.ID and t2.TIME BETWEEN trunc (t1.TIME, 'hh24') and trunc (t1.TIME + 2/24, 'hh24')
Ответы:
У Оракла есть короткий синтаксис внутренних соединений. Вообще JOIN не нужно указывать.
SELECT t1.ID, t1.TIME FROM t1,t2 WHERE t1.ID = t2.ID AND trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24') |
SELECT t1.ID, t1.TIME FROM t1,t2 WHERE t1.ID = t2.ID AND trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24')
И есть общая рекомендация - выделять ключевые слова SQL в uppercase. Так их удобнее видеть.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для сравнения времени в таблицах, отбросив минуты и секунды до часов, вам нужно использовать функцию DATE_FORMAT() в MySQL. Эта функция позволяет форматировать дату или время в заданном формате.
Пример использования функции DATE_FORMAT():
SELECT DATE_FORMAT(time_column, '%H:00:00') AS hour_only FROM your_table;
В данном запросе мы выбираем столбец времени (time_column) из вашей таблицы и форматируем его так, чтобы отобразить только часы, отбросив минуты и секунды. Формат '%H:00:00' указывает, что нам нужно показать только часы, а минуты и секунды будут равны нулю.
После выполнения этого запроса, вы получите столбец hour_only, в котором будут отображены только часы из времени, указанного в столбце time_column. Теперь вы можете сравнивать время по часам без учёта минут и секунд.
Надеюсь, это поможет вам решить вашу проблему сравнения времени в таблицах, отбрасывая минуты и секунды до часов. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.