【问题标题】:Oracle find average of two timestampsoracle求两个时间戳的平均值
【发布时间】:2011-10-04 16:03:52
【问题描述】:

我看不出这就是 ahrd,但我似乎无法在任何地方找到解决方案。它已为日期完成,但我无法让它适用于 TIMESTAMP。

我正在努力

select avg(last_timestmp - ref_timestmp) as average from param

它一直告诉我这不是一个有效的数字,我明白了。但是我如何使它成为一个有效的数字呢?我试过提取物和其他一些东西,但似乎没有任何效果。

我想要以秒为单位的平均值。百分之一秒是.01,6小时是21600

谢谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以使用 EXTRACT 以秒为单位取出零件并将它们相加,然后计算您的平均值:

    select
        avg(extract(second from intrvl)
            + extract(minute from intrvl) * 60
            + extract(hour from intrvl) * 60 * 60
            + extract(day from intrvl) * 60 * 60 * 24) average
    from (
        select (last_timestmp - ref_timestmp) intrvl 
        from param
    )
    

    【讨论】:

      【解决方案2】:

      你可以试试

      SELECT AVG(p.last_date - p.ref_date) as average FROM (
        SELECT 
          last_timestamp - TO_DATE('1970-01-01', 'YYYY-MM-DD') \* 8640000 as last_date
          ,ref_timestamp - TO_DATE('1970-01-01', 'YYYY-MM-DD') \* 8640000 as ref_date
        FROM param ) p
      

      这会给你以毫秒为单位的差异。

      见:http://blogs.oracle.com/mock/entry/converting_oracle_dates_to_unix

      【讨论】:

      • 不一致的数据类型:预期 NUMBER 得到 DAT
      猜你喜欢
      • 2017-06-03
      • 2017-10-29
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多