【问题标题】:Calculating Timestamp difference - doesnt work beyond 48 hours计算时间戳差异 - 超过 48 小时不起作用
【发布时间】:2017-10-30 11:55:06
【问题描述】:

我正在计算两个时间戳之间的差异,当差异超过 48 小时时,这在某种程度上不起作用。

这是我的代码: select systimestamp, mystoredtimestamp, extract( hour from diff ) || ' hours ' || extract( minute from diff ) || ' minutes' from (select (systimestamp - mystoredtimestamp)) diff from dual)

输出是

1. systimestamp: 30-OCT-17 11.48.43.783572 AM +00:00,
2. mystoredtimestamp: 27-OCT-17 07.30.36.956687 AM,
3. difference: 4 hours 18 minutes

(不知怎的,这个markdown编号没有被渲染,上面是查询的三个不同的列)

mystoredtimestamp 是 TIMESTAMP(6) WITH LOCAL TIME ZONE 数据类型。那是导致问题的原因吗?如果是这样,我现在该如何解决?

【问题讨论】:

    标签: oracle plsql oracle-apex oracle-apex-5


    【解决方案1】:

    您还需要提取天数。它不会自动转换为小时数。

    SELECT
      extract ( DAY FROM diff )
      || ' days '
      ||extract( hour FROM diff )
      || ' hours '
      || extract( minute FROM diff )
      || ' minutes'
    FROM
      (
        SELECT
          systimestamp - CAST ( '27-OCT-17 07.30.36.956687 AM' AS TIMESTAMP(6)
          WITH LOCAL TIME ZONE ) diff
        FROM
          DUAL
      );
    

    O/p

    3 days 2 hours 26 minutes
    

    如果您希望以小时为单位,请乘以 24 并加上天数。

    SELECT
      24 * extract ( DAY FROM diff )
       +
     extract( hour FROM diff )
      || ' hours '
      || extract( minute FROM diff )
      || ' minutes'
    FROM
      (
        SELECT
          systimestamp - CAST ( '27-OCT-17 07.30.36.956687 AM' AS TIMESTAMP(6)
          WITH LOCAL TIME ZONE ) diff
        FROM
          DUAL
      );
    

    O/p

    74 hours 28 minutes
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2020-05-13
      相关资源
      最近更新 更多