sql - 许多天之间的人类可读的耗时

标签 sql oracle

我使用 Oracle SQL,我有一个包含 3 列的表:Process , Start DateEnd Date .我想计算每个进程的持续时间。

我使用了这个查询:

select 
(enddate.date_value - startdate.date_value) as duration
from dual

结果是几天。

例如:开始日期是 30.3.2016 17:14:53结束日期是 8.7.2016 14:51:21
当我使用查询时,结果是99.90032407407407407407407407407407407407 ,但我想要这样的结果:3 months, 7 days, 21 hours, 36 minutes, 28 seconds .

我怎样才能做到这一点?

最佳答案

这个复杂的查询(特别是 DAY !!):

计算正确的 Day我加Month和 12 * Year到原来的日期。

with dates as(
select
   sysdate       as d1,
   sysdate-99.90032407407407407407407407407407407407-365  as d2
from
   dual
),
dates_parts as (
SELECT
    d1,
    d2,
    EXTRACT(YEAR   FROM (d1 - d2) YEAR TO MONTH ) as Year,
    EXTRACT(MONTH  FROM (d1 - d2) YEAR TO MONTH ) as Month,
    EXTRACT(DAY    FROM (d1 - d2) DAY TO SECOND ) as Day,
    EXTRACT(HOUR   FROM cast(d1 as timestamp) - cast(d2 as timestamp)) as Hour,
    EXTRACT(MINUTE FROM cast(d1 as timestamp) - cast(d2 as timestamp)) as Minute,    
    EXTRACT(SECOND FROM cast(d1 as timestamp) - cast(d2 as timestamp)) as Second
FROM dates
)
select
    dates_parts.Year,
    dates_parts.Month,
    dates_parts.Day,
    dates_parts.Hour,
    dates_parts.Minute,
    dates_parts.Second,
    EXTRACT(DAY FROM (d1 - ADD_MONTHS(d2,Month+Year*12)) DAY TO SECOND ) as Day_Corrected
from 
    dates_parts

将产生不同的日期部分:
| YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | DAY_CORRECTED |
|------|-------|-----|------|--------|--------|---------------|
|    1 |     3 | 464 |   21 |     36 |     28 |             7 |

关于sql - 许多天之间的人类可读的耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46970803/

相关文章:

mysql - 性能

java - SQL 查询问题

oracle - 相同的代码但不同的结果

sql - 这种情况需要一个 SQL 查询

sql - 使用 SQL 获取按部门分组的最大值

sql - oracle 在多线程环境中选择和更新或选择和插入

mysql - 计算 MySQL 中列的简单中位数

sql - 从命令 shell 处理 COPY 中的引号到 CSV

sql - 编写 T-SQL 时使用 WHERE + AND + CASE + IN

oracle - Oracle SQL Developer 在哪里存储连接?