Сравните sysdate с iso 8601 с помощью оракула

0

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

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

  • 0
    Почему вы вызываете TO_DATE(...) для значения, которое уже является DATE (или TIMESTAMP )?
  • 0
    причина, по которой я это делаю, заключается в том, что мне нужно преобразовать systimestamp в iso 8601, чтобы сравнить его. Я думаю, что я не уверен, нужно ли мне это делать.
Показать ещё 2 комментария
Теги:
timestamp
sysdate

1 ответ

0

Никогда не храните значения даты в виде строки, то есть 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
  • 0
    когда я использую вашу первую команду, я получаю ORA-01882: ошибка часового пояса не найдена

Ещё вопросы

Сообщество Overcoder
Наверх
Меню