oracle - 微调 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
(对于 is 的情况latest_timestamp
)NULL
并简单地将结果乘以24
(以获得小时数),您会得到
select (nvl(latest_timestamp, sysdate) - creation_timestamp)) * 24 as time_in_hours
from some_table
该结果可能应该四舍五入(但这很容易)。
看看有没有帮助。
推荐阅读
- excel - VBA 日期清理/重新格式化
- typescript - localforage 在构建中不起作用
- symfony - Concurrency issues with Symfony and Doctrine
- electron - Spectron 在测试运行期间打开空终端
- javascript - D3 v4 树——增加清晰度
- algorithm - 需要帮助分析该算法的时间复杂度
- c# - asp.net core 2.1 模型绑定(提交后)
- python - 使用 selenium 查找所有具有 onclick 属性的元素?
- java - 语法错误,声明常量时字符无效
- kubernetes - Kubernetes/Openshift 上的 Gitlab-Runner