微调提取时间和日期
Fine tune EXTRACT HOUR and 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_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
我有一个逻辑按照下面的查询从时间戳中提取天数并以小时为单位。
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