Сравните sysdate с iso 8601 с помощью оракула - PullRequest
0 голосов
/ 31 января 2019

Проблема в том, что в настоящее время я пытаюсь разрешить проблему, чтобы выбрать значение даты и времени (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 минут в прошлом, не дольше.

Надеюсь, кто-то может мне помочь,Заранее спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019

Никогда не сохраняйте значения даты в виде строки, то есть 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
...