如何将时间戳转换为小时?

时间:2015-08-13 17:16:15

标签: oracle timestamp

我在Oracle中进行下一个查询:

字段NO是数字,字段DATETIME是时间戳。

genre_titles.title_id(=titles.tmdb_id)

结果是:

select ARC.NO,MAX(ARC.DATETIME)-MIN(ARC.DATETIME) AS HORAS_TRABAJADAS from archivo ARC GROUP BY ARC.NO;

我看到“1”显示在左侧,然后显示一段时间。

我想知道是否可以显示16:17:22(这是8.8:41:0 X 2),因为它应该是16:17:22。

1 个答案:

答案 0 :(得分:2)

从另一个the result is an interval中减去一个时间戳。您可以看到的值1 8:8:41.0代表1天,8小时,8分41秒。目前尚不清楚为什么你认为结果应该加倍,但将该值解释为16:17:22是不正确的。

作为一个包含两个发明时间戳的快速演示:

with archivo (no, datetime) as (
  select 256, timestamp '2015-08-14 11:37:16' from dual
  union all select 256, timestamp '2015-08-13 03:28:35' from dual
)
select ARC.NO, MIN(ARC.DATETIME) AS MIN_DATETIME, MAX(ARC.DATETIME) AS MAX_DATETIME,
  MAX(ARC.DATETIME)-MIN(ARC.DATETIME) AS HORAS_TRABAJADAS
from archivo ARC GROUP BY ARC.NO;

        NO MIN_DATETIME          MAX_DATETIME          HORAS_TRABAJADAS
---------- --------------------- --------------------- -----------------------------
       256 2015-08-13 03:28:35.0 2015-08-14 11:37:16.0 +000000001 08:08:41.000000000

如果要以不同的格式显示间隔,则需要提取其组件,例如:

select NO,
  EXTRACT(day FROM HORAS_TRABAJADAS) || ' days, '
    || EXTRACT(hour FROM HORAS_TRABAJADAS) || ' hours, '
    || EXTRACT(minute FROM HORAS_TRABAJADAS) || ' minutes and '
    || EXTRACT(second FROM HORAS_TRABAJADAS) || ' seconds'
    AS HORAS_TRABAJADAS
from (
  select ARC.NO, MAX(ARC.DATETIME)-MIN(ARC.DATETIME) AS HORAS_TRABAJADAS
  from archivo ARC GROUP BY ARC.NO
)

        NO HORAS_TRABAJADAS
---------- --------------------------------------------------
       256 1 day, 8 hours, 8 minutes and 41 seconds

我使用内联视图来避免重复max-min计算,但这是可选的。

或者将天数添加为24小时的倍数:

select NO,
  24 * EXTRACT(day FROM HORAS_TRABAJADAS) + EXTRACT(hour FROM HORAS_TRABAJADAS)
    || ':' || LPAD(EXTRACT(minute FROM HORAS_TRABAJADAS), 2, '0')
    || ':' || LPAD(EXTRACT(second FROM HORAS_TRABAJADAS), 2, '0')
    AS HORAS_TRABAJADAS
from (
  select ARC.NO, MAX(ARC.DATETIME)-MIN(ARC.DATETIME) AS HORAS_TRABAJADAS
  from archivo ARC GROUP BY ARC.NO
);

        NO HORAS_TRABAJADAS
---------- ----------------
       256 32:08:41

不幸的是,对于间隔没有简单的to_char()等价物。