Как задать интервал поиска по времени?
У меня есть дата и время, и есть вторая таблица, где дата одинаковая, но время может отличатся от 1 секунды до 30 минут вперед.
К примеру, есть искомая запись 2020-09-23 18:47:51, а во второй таблице она записана так 2020-09-23 18:48:01.
Как задать пределы поиска?
Так:
DATE_TIME + 1 / (24 * 60)
Или так:
DATE_TIME + interval '60' minute
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Дата и время может хранится в двух встроенных типах данных, для которых логические операции с разницей двух значений ожидают различные типы данных.
Более точный тип TIMESTAMP ожидает тип INTERVAL:
with t (ts1, ts2) as (
select
timestamp'2020-09-23 18:47:51', timestamp'2020-09-23 18:48:01'
from dual
)
select t.*, (ts2 - ts1) diff
from t
where (ts2 - ts1) < interval '2' minute;
TS1 TS2 DIFF
--------------------------- --------------------------- -------------------
23.09.20 18:47:51,000000000 23.09.20 18:48:01,000000000 +00 00:00:10.000000
Или более простой тип DATE, который ожидает числовое значение, где один день равен 1.
Во избежания "магических" и трудночитаемых чисел, принято конфигурировать их однострочным запросом:
with params as (
select (1/24/60) minutes, (1/86400) seconds from dual),
d (dt1, dt2) as (
select
cast('2020-09-23 18:47:51' as date), cast('2020-09-23 18:48:01'as date)
from dual
)
select d.*, (dt2 - dt1) diff
from d, params
where (dt2 - dt1) < 2*minutes + 0*seconds;
DT1 DT2 DIFF
------------------- ------------------- ----------
2020-09-23 18:47:51 2020-09-23 18:48:01 ,000115740741