【问题标题】:Finding if x minutes have passed查找是否已经过了 x 分钟
【发布时间】:2018-09-13 06:59:32
【问题描述】:

所以,我需要知道是否已经过了 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 服务器时间而不是后端服务器,以免混淆时区,但它仍然不与我合作

编辑:

感谢@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

证明它有效

谢谢,希望这对其他人有用

【问题讨论】:

  • @Randy 抱歉,我不明白这有什么关系。我在问为什么比较失败,而不是在时间戳字段中添加时间
  • @âńōŋŷXmoůŜ 对不起,我不认为有必要,已经在 xTable 中显示了我需要测试的数据(图像结果查询中的原始列),而对于 configurationTable,它只是一个'20' 字符串,我将其转换为数字以添加它
  • 是的;我现在才意识到。谢谢。我正在看这个。
  • lockedtts字段是什么类型?带时区的时间戳?

标签: sql oracle plsql


【解决方案1】:

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

【讨论】:

  • 感谢这确实有效。顺便说一句,我不需要使用 with,在我的原始查询中,我只做检查,从不检索数据。我只添加了用于测试和调试目的的数据检索。请检查我的编辑以进行澄清
猜你喜欢
  • 2011-10-17
  • 2017-08-30
  • 2017-07-12
  • 1970-01-01
  • 2022-01-17
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多