【问题标题】:SQL Extract Values from Timestamp DifferenceSQL 从时间戳差异中提取值
【发布时间】:2020-03-11 02:25:23
【问题描述】:

我正在尝试从 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 date datetime datediff


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 谢谢!这正是我想要的。非常感谢。
    • 欢迎@MBasith!很高兴它有帮助。
    【解决方案2】:

    你可以看看extract()查看这个答案:TIMESTAMPDIFF in Oracle 11g?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 2015-06-27
      相关资源
      最近更新 更多