问题描述
我有一个逻辑,按照下面的查询从时间戳中提取天数并以小时为单位。
CASE WHEN LATEST_TIMESTAMP IS NULL
THEN
EXTRACT (HOUR FROM (SYSDATE - CREATION_TIMESTAMP)) + EXTRACT (DAY FROM (SYSDATE -
CREATION_TIMESTAMP)) * 24
ELSE
EXTRACT (HOUR FROM (LATEST_TIMESTAMP - CREATION_TIMESTAMP)) + EXTRACT (DAY FROM
(LATEST_TIMESTAMP - CREATION_TIMESTAMP)) * 24
END
AS TIME_IN_HOURS
处理多条记录时效率低下,无论如何是否可以微调查询?
解决方法
两个 DATE
数据类型值的差异是它们之间的天数。因此,如果您“缩短”您的代码以使用 NVL
(对于 latest_timestamp
为 NULL
的情况)并简单地将该结果乘以 24
(以获得小时数) ,你会得到
select (nvl(latest_timestamp,sysdate) - creation_timestamp)) * 24 as time_in_hours
from some_table
该结果可能应该四舍五入(但这很容易)。
看看是否有帮助。
,NVL 和 Extract 的组合解决方案
select EXTRACT (DAY FROM(nvl(latest_timestamp,sysdate) - creation_timestamp)) * 24) as time_in_hours from some_table