我在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。
答案 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()
等价物。