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