【问题标题】:Apply average( ) function to datediff between timestamp fields将平均()函数应用于时间戳字段之间的日期差异
【发布时间】:2021-12-25 21:26:18
【问题描述】:

我有一些看起来像这样的数据:

我的表

name start end
Michigan 06-NOV-20 08.25.59.000000000 AM 06-NOV-20 08.44.52.000000000 AM
State 22-NOV-20 11.49.11.000000000 AM 22-NOV-20 11.54.06.000000000 AM

我正在尝试创建一个新列来计算持续时间作为开始和结束之间的差异。然后,我想应用一个数学平均值(平均值/中位数)来找出每年的平均持续时间。

我的代码,目前:

SELECT
    start - end AS duration
FROM
    my_table

当前输出:

duration
-0 0:18:53.0
-0 0:4:55.0

我想要什么:

duration
1133
295

如何将持续时间字段从日期时间转换为秒或分钟,以便我可以将平均函数应用于持续时间字段?

【问题讨论】:

  • 请根据此 2 行示例输入包含您期望的确切输出。
  • 您使用的是什么版本的 Oracle?
  • 另外,你应该使用end - start,而不是start - end
  • 另外,它是AVG,而不是AVERAGE
  • 哦,难怪我得到了负号。谢谢@戴

标签: oracle datetime average datediff


【解决方案1】:

我在网上找到了这个。这会有帮助吗?

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:10729709873260

【讨论】:

    【解决方案2】:

    我建议您花一些时间阅读您的版本的 Oracle 文档,还可以快速了解日期/时间戳,请参阅here(不仅仅是第一个子主题)。
    您的问题是日期/时间戳减法的结果是什么。您可以获得两个结果。减去日期会得到一个浮点数,其中整数部分表示天数,小数部分表示一天的小数部分。减去时间戳会产生数据类型Interval Day to Second。这个案例处理时间戳。 Extract 用于获取区间的各个组成部分。由于您在持续时间(以秒为单位)之后,您提取每个组件乘以适当的值以转换为秒,并对结果进行总计:

    select  extract(day from diff) * 60 * 60 * 24     -- days to seconds
          + extract(hour from diff) * 60 * 60         -- hours to seconds
          + extract(minute from diff) * 60            -- minutes to seconds
          + extract(second from diff)                 -- seconds
    from ( 
          select to_timestamp('06-NOV-20 08.44.52.000000000 AM', 'dd-mon-yy hh12.mi.ss.ff AM')
               - to_timestamp('06-NOV-20 08.25.59.000000000 AM', 'dd-mon-yy hh12.mi.ss.ff AM') diff
            from dual
         );
    

    【讨论】:

      猜你喜欢
      • 2019-01-04
      • 1970-01-01
      • 2021-09-21
      • 2014-09-24
      • 2015-11-22
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多