【发布时间】: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字段是什么类型?带时区的时间戳?