Oracle. Sql. Выборка данных за период даты и в диапазоне времени

Имеется столбец набор данных - дата со временем (type DATE) необходимо получить все значения находящиеся в заданном периоде дат и диапазоне времени: к примеру выбрать все записи с 14:25 до 19:30 в разные дни

Select * 
from Dates dt
where dt.date_time > to_date('2024-01-01 06:00','yyyy-mm-dd hh24:mi')
and dt.date_time < to_date('2024-01-11 05:59','yyyy-mm-dd hh24:mi')

and tr.date_time - trunc(tr.date_time) > to_date('14:25','hh24:mi')
and tr.date_time - trunc(tr.date_time) < to_date('19:30','hh24:mi')

-- [1]: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено DATE

Подскажите как правильно добавить условие для выборки диапазона времени, не хочется в несколько уровней строить запрос


Ответы (1 шт):

Автор решения: ESkri

Вычитать даты - это правильное решение, позволяющее серверу избежать затратных преобразований из даты в строку (да ещё с учётом текущей локали!).

Ваше условие

tr.date_time - trunc(tr.date_time) > to_date('14:25','hh24:mi')
and tr.date_time - trunc(tr.date_time) < to_date('19:30','hh24:mi')

нужно записать как

(tr.date_time - trunc(tr.date_time))*24*60 between 14*60+25 and 19*60+30
→ Ссылка