Как сравнить по времени в таблицах, отбросив минуты и секунды до часов?

Ссылка скопирована
1 ответ

Есть 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. Так их удобнее видеть.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Для сравнения времени в таблицах, отбросив минуты и секунды до часов, вам нужно использовать функцию DATE_FORMAT() в MySQL. Эта функция позволяет форматировать дату или время в заданном формате.

Пример использования функции DATE_FORMAT():

SELECT DATE_FORMAT(time_column, '%H:00:00') AS hour_only
FROM your_table;

SELECT DATE_FORMAT(time_column, '%H:00:00') AS hour_only FROM your_table;

В данном запросе мы выбираем столбец времени (time_column) из вашей таблицы и форматируем его так, чтобы отобразить только часы, отбросив минуты и секунды. Формат '%H:00:00' указывает, что нам нужно показать только часы, а минуты и секунды будут равны нулю.

После выполнения этого запроса, вы получите столбец hour_only, в котором будут отображены только часы из времени, указанного в столбце time_column. Теперь вы можете сравнивать время по часам без учёта минут и секунд.

Надеюсь, это поможет вам решить вашу проблему сравнения времени в таблицах, отбрасывая минуты и секунды до часов. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно