@Djasar

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

Есть 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


Но одно но, в первой таблице у меня t1.time 31-07-2022 11:42:05 а t2.time 31-07-2022 11:00:00 (только часы)
необходимо сравнить по часовым значениям, отбросив минуты и секунды
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@alexalexes
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')

PS: Хорошо бы еще индекс создать под этот формат времени для колонок t1.TIME и t2.TIME, тогда запрос будет всегда производителен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
У Оракла есть короткий синтаксис внутренних соединений. Вообще JOIN не нужно указывать.

SELECT 
  t1.ID, t1.TIME
FROM 
  t1,t2 
WHERE t1.ID = t2.ID
  AND trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24')

И есть общая рекомендация - выделять ключевые слова SQL в uppercase. Так их удобнее видеть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы