微调 EXTRACT HOUR 和 DAY

问题描述

我有一个逻辑,按照下面的查询从时间戳中提取天数并以小时为单位。

  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_timestampNULL 的情况)并简单地将该结果乘以 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...