从时间戳差值中提取数值的SQL

3
我尝试从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
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

DB Fiddle演示

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

谢谢!这正是我在寻找的。非常感谢。 - MBasith
欢迎 @MBasith!很高兴它有所帮助。 - GMB

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接