使用Oracle将sysdate与iso 8601进行比较

时间:2019-01-31 11:53:59

标签: mysql oracle timestamp sysdate

问题是我当前要解决的问题是选择一个日期时间值(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 :(得分: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