所以,我需要知道20分钟过去了,但是,使用时间戳证明我不擅长pl / sql
这是我的查询
SELECT
systimestamp currenttime,
lockeddtts original,
lockeddtts + to_number( (
SELECT
value
FROM
configurationTable
WHERE
key = 'UNLOCK_TIME'
) ) * INTERVAL '1' MINUTE added20,
CASE
WHEN systimestamp > lockeddtts + to_number( (
SELECT
value
FROM
configurationTable
WHERE
key = 'UNLOCK_TIME'
) ) * INTERVAL '1' MINUTE THEN 1
ELSE 0
END
passed20
FROM
xTable
这是我得到的结果
根据我的理解和我的逻辑,currentTime确实比原始时间加上20分钟,但是,oracle告诉它不是
我错过了什么?
为了使用oracle服务器时间而不是后端服务器,我正在做这个oracle明智,所以不要乱用时区,但仍然没有与我合作
编辑:
感谢@Kjetil S.的答案,我只需稍微调整一下就可以了,将日期和时间戳转换为时间戳并且正在工作
这是我的最终查询
SELECT
CASE
WHEN systimestamp > to_timestamp(lockeddtts + to_number( (
SELECT
value
FROM
configurationTable
WHERE
key = 'UNLOCK_TIME'
) ) / ( 24 * 60 )) THEN 1
ELSE 0
END
passed20
FROM
xTable
证明它有效
谢谢并希望这适用于其他人
答案 0 :(得分:2)
我确信interval
可以某种方式使用,但我认为“经典”的Oracle方法是将天数添加到TIMESTAMP
或DATE
列。处理分钟而不是几天时,只需要除以24 * 60,这是一天中的分钟数。类似的东西:
with c as (select value minutes from configurationTable where key='UNLOCK_TIME')
select
systimestamp currenttime,
lockeddtts original,
lockeddtts+minutes/(24*60) lockeddtts_plus_minutes,
case when systimestamp >= lockeddtts+minutes/(24*60) then 1 else 0 end passed
from xTable,c
使用with
这样可以避免两次写select ... from configurationTable
。