SQL从时间戳差异中提取值

问题描述 投票:3回答:2

我正在尝试从减去Oracle数据库中两个时间戳的输出中提取天,小时,分钟,秒。然后,我想提取提取的值并将其放在单独的列中。我可以使用substr来完成此操作,但这似乎并不高效。有没有更有效和编程的方法来提取值?下面是一个查询示例,其中包含当前和所需的输出。

示例:

SELECT 

to_timestamp('2019-11-10 15:00:00', 'YYYY-MM-DD hh24:mi:ss') -
to_timestamp('2019-10-25 13:25:00', 'YYYY-MM-DD hh24:mi:ss')  
as TIME_DIFF,

SUBSTR(to_timestamp('2019-11-10 15:00:00', 'YYYY-MM-DD hh24:mi:ss') -
to_timestamp('2019-10-25 13:25:00', 'YYYY-MM-DD hh24:mi:ss'), 9, 2)  
as DAYS

from dual

当前输出:

TIME_DIFF                     | DAYS
------------------------------+-----
+000000016 01:35:00.000000000 | 16

所需的输出:

DAYS | HOUR | MIN | SS
-----+------+-----+---+
16   |  01  |  35 | 00
sql oracle datetime datediff
2个回答
4
投票

您可以使用extract()从间隔中拉出所需的值:

with t as (
    select to_timestamp('2019-11-10 15:00:00', 'YYYY-MM-DD hh24:mi:ss') -
        to_timestamp('2019-10-25 13:25:00', 'YYYY-MM-DD hh24:mi:ss')  
        as TIME_DIFF
    from dual
)
select 
    extract(day from time_diff) days,
    extract(hour from time_diff) hours,
    extract(minute from time_diff) minutes,
    extract(second from time_diff) seconds
from t

Demo on DB Fiddle

天数|小时|分钟|秒---: ----:| ------:| ------:16 | 1 | 35 | 0

0
投票

您可以看看extract()签出此答案:TIMESTAMPDIFF in Oracle 11g?

© www.soinside.com 2019 - 2024. All rights reserved.