Проблема заключается в том, что в настоящее время я пытаюсь решить проблему, выбрав значение даты и времени (iso 8601) и сравнив его с sysdate и временем, а sysdate/time должно быть в прошлом 20 мин.
Я пытался использовать TO_TIMESTAMP
и пытался преобразовать SYSDATE
но проблема продолжает возвращаться.
select * from table
where timestamp_from_the_table > to_date(systimestamp, 'YYYY-MM-DD"T"hh24:mi:ss.ff3TZR') -INTERVAL '30' MINUTE
В результате я хотел бы получить список с метками времени из таблицы, но отфильтрованные по времени только из 20 минут в прошлом, а не дольше.
Надеюсь, кто-нибудь может мне помочь. Заранее спасибо.
Никогда не храните значения даты в виде строки, то есть VARCHAR2
!
В вашем случае вы можете запустить
WHERE TO_TIMESTAMP_TZ(timestamp_from_the_table, 'YYYY-MM-DD"T"hh24:mi:ss.ff3TZR')
> systimestamp - INTERVAL '30' MINUTE
Это может быть вариант для создания виртуального столбца, т.е.
ALTER TABLE your_table ADD (real_timestamp TIMESTAMP(3) WITH TIME ZONE (TO_TIMESTAMP_TZ(timestamp_from_the_table, 'YYYY-MM-DD"T"hh24:mi:ss.ff3TZR') ));
Тогда вы могли бы просто бежать
WHERE real_timestamp > systimestamp - INTERVAL '30' MINUTE
TO_DATE(...)
для значения, которое уже являетсяDATE
(илиTIMESTAMP
)?