平均日期功能

时间:2014-08-11 12:15:43

标签: sql oracle11g

我知道我们不能在表中包含日期的列上使用数学函数。但是我遇到了以下SQL语句,它将日期转换为数字

SELECT avg(ORDER_DATE-SYSDATE) FROM ORDERS; 
TABLE NAME ORDERS 

COLUMNS     DATATYPE        
ORDER_DATE : SYSDATE
ORDER_AMT:   NUMBER

我想知道上面的sql语句如何将日期转换为数字

1 个答案:

答案 0 :(得分:0)

以下是平均日期值:

with t(d) as (
  select sysdate from dual union all
  select sysdate + 1 from dual union all
  select ADD_MONTHS(sysdate, 1) from dual 
)
SELECT avg((d - to_date('01-01-1970', 'MM-DD-YYYY'))*24*60*60*1000)/24/60/60/1000 + to_date('01-01-1970', 'MM-DD-YYYY') difference_in_ms
  FROM t
  1. (d - to_date('01-01-1970', 'MM-DD-YYYY')它给出了d日期值(表格中的值)与01-01-1970之间的天数,它为您提供了差异的价值
  2. the value of the difference*24*60*60*1000计算d日期值(表中的值)和01-01-1970之间的毫秒数(因为一天有24小时,一小时有60分钟,一分钟)有60秒,一秒有1000毫秒)
  3. 然后查询计算表格的平均毫秒数
  4. 然后使用/24/60/60/1000将平均毫秒数转换回天数,即可得到平均天数。
  5. 然后我将此平均天数添加到01-01-1970日期(因为我之前减去了它),它会得到平均日期(当您添加到目前为止添加日期的数字时)