Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找是否已过x分钟_Sql_Oracle_Plsql - Fatal编程技术网

Sql 查找是否已过x分钟

Sql 查找是否已过x分钟,sql,oracle,plsql,Sql,Oracle,Plsql,所以,我需要知道是否已经过去了20分钟,但是,使用时间戳证明我不擅长pl/sql 这是我的问题 SELECT systimestamp currenttime, lockeddtts original, lockeddtts + to_number( ( SELECT value FROM configurationTable WHERE key = 'UNLOCK_TIME' ) ) * INTERVAL '1' MINU

所以,我需要知道是否已经过去了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
这就是我得到的结果

根据我的理解和逻辑,当前时间确实比最初的时间加上20分钟还要长,但甲骨文告诉我它不是

我错过了什么

我这样做是为了使用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
证明它有效


感谢并希望这对其他人有效

我相信
interval
可以用某种方式,但我认为Oracle的“经典”方式是将天数添加到
时间戳
日期
列中。当处理分钟而不是天时,只需除以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

这样使用
可以避免编写
选择。。。从configurationTable中
两次。

我确信可以以某种方式使用
间隔
,但我认为Oracle的“经典”方法是将天数添加到
时间戳
日期
列中。当处理分钟而不是天时,只需除以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

这样使用
可以避免编写
选择。。。从configurationTable中
两次。

@Randy抱歉,我看不出这有什么关系。我想问的是为什么比较失败,而不是向时间戳字段@XmoůomoŜ添加时间。对不起,我不认为有必要,因为我已经在xTable中显示了我需要测试的数据(图像结果查询中的原始列),而对于configurationTable,我只需要将一个“20”字符串转换为数字来添加它;我刚才才意识到。谢谢我正在看这个。什么类型的
lockedts
字段?带时区的时间戳?@Randy抱歉,我看不出这有什么关系。我想问的是为什么比较失败,而不是向时间戳字段@XmoůomoŜ添加时间。对不起,我不认为有必要,因为我已经在xTable中显示了我需要测试的数据(图像结果查询中的原始列),而对于configurationTable,我只需要将一个“20”字符串转换为数字来添加它;我刚才才意识到。谢谢我正在看这个。什么类型的
lockedts
字段?带时区的时间戳?谢谢这确实有效。顺便说一句,我不需要使用with,在我最初的查询中,我只做检查,从不检索数据。我只是出于测试和调试的目的添加了数据检索。请检查我的编辑以获得澄清,这确实有效。顺便说一句,我不需要使用with,在我最初的查询中,我只做检查,从不检索数据。我只是出于测试和调试的目的添加了数据检索。请检查我的编辑以获得澄清