代码之家  ›  专栏  ›  技术社区  ›  YK mar

平均时间戳oracle(毫秒)

  •  1
  • YK mar  · 技术社区  · 6 年前

    大家好,我需要得到两个日期差的平均值(时间戳)

    我试过这个

    select AVG((sva.endTime - sva.startTime)) as seconds from SVATable sva;
    

    但我犯了个错误

    93/5000
    ORA-00932: Inconsistent data types; expected: NUMBER; got: INTERVAL DAY TO SECOND
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Kaushik Nayak    6 年前

    您可以使用 EXTRACT 获取 AVG 秒。

    SELECT AVG (EXTRACT (SECOND FROM (sva.endTime - sva.startTime)))
              AS avg_seconds
      FROM SVATable sva;
    
        2
  •  0
  •   Gordon Linoff    6 年前

    这在Oracle中是一个潜在的问题。您的计算将与 date 数据类型,但不适用于 timestamps

    一种解决方案是从时间间隔中提取天、小时、分钟和秒。另一种是使用日期算法。您可以使用以下方法获得一天的分数:

    select (date '2000-01-01' + (sva.endTime - sva.startTime)) - date '2000-01-01'
    

    您可以使用平均值并转换为秒:

    select avg( (date '2000-01-01' + (sva.endTime - sva.startTime)) - date '2000-01-01') * (60*60*24)