我知道我们不能在表中包含日期的列上使用数学函数。但是我遇到了以下SQL语句,它将日期转换为数字
SELECT avg(ORDER_DATE-SYSDATE) FROM ORDERS;
TABLE NAME ORDERS
COLUMNS DATATYPE
ORDER_DATE : SYSDATE
ORDER_AMT: NUMBER
我想知道上面的sql语句如何将日期转换为数字
答案 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
(d - to_date('01-01-1970', 'MM-DD-YYYY')
它给出了d
日期值(表格中的值)与01-01-1970
之间的天数,它为您提供了差异的价值the value of the difference*24*60*60*1000
计算d
日期值(表中的值)和01-01-1970
之间的毫秒数(因为一天有24小时,一小时有60分钟,一分钟)有60秒,一秒有1000毫秒)/24/60/60/1000
将平均毫秒数转换回天数,即可得到平均天数。01-01-1970
日期(因为我之前减去了它),它会得到平均日期(当您添加到目前为止添加日期的数字时)