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

How do I convert a timestamp to hours?

我正在 Oracle 中执行以下查询:

字段“NO”是一个数字,字段“DATETIME”是时间戳。

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

结果是:

NO 256  
DATETIME 1 8:8:41.0 

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

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

当您从另一个时间戳中减去一个时间戳时 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

我使用内嵌视图来避免重复最大-最小值计算,但这是可选的。

或者将天数添加为 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() 等价区间。