[英]How do i find the average value of a particular column which has date datatype in oracle? And i want the average to be NUMBER datatype
Let say i have this table and i have inserted alot of date into it.假设我有这张表,并且我在其中插入了很多日期。
CREATE TABLE dateOfTransaction(
TransDATE DATE NOT NULL);
I need to convert the Transdate to number datatype first?我需要先将 Transdate 转换为数字数据类型? then do然后做
SELECT AVG(TransDate) FROM dateOfTransaction;
I don't quite understand what that "average date" is, but - just for fun - have a look at his:我不太明白那个“平均日期”是什么,但是——只是为了好玩——看看他的:
Set date format (to see what is what):设置日期格式(看看是什么):
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
Sample data:样本数据:
SQL> create table dateoftransaction
2 (transdate date);
Table created.
SQL> insert into dateoftransaction
2 select sysdate from dual union all
3 select date '2018-11-23' from dual union all
4 select to_date('30.09.2025 13:32:33', 'dd.mm.yyyy hh24:mi:ss') from dual;
3 rows created.
SQL> select * from dateoftransaction;
TRANSDATE
-------------------
13.11.2019 20:59:00
23.11.2018 00:00:00
30.09.2025 13:32:33
SQL>
Average date is - of course - invalid:平均日期 - 当然 - 无效:
SQL> select avg(transdate) from dateoftransaction;
select avg(transdate) from dateoftransaction
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got DATE
But, what if we convert it to a Julian date?但是,如果我们将它转换为儒略日期呢?
SQL> select transdate, to_char(transdate, 'J') julian_date from dateoftransaction;
TRANSDATE JULIAN_
------------------- -------
13.11.2019 20:59:00 2458801
23.11.2018 00:00:00 2458446
30.09.2025 13:32:33 2460949
That is a number, and yes - we know how to calculate average value on numbers, right?那是一个数字,是的 - 我们知道如何计算数字的平均值,对吧?
SQL> select
2 avg(to_number(to_char(transdate, 'J'))) avg_julian_date,
3 to_date(trunc(avg(to_number(to_char(transdate, 'J')))), 'JSP') avg_date
4 from dateoftransaction;
AVG_JULIAN_DATE AVG_DATE
--------------- -------------------
2459398,67 02.07.2021 00:00:00
See if it helps.看看有没有帮助。
Subtract a base date, take the average, and add back to the base:减去一个基准日期,取平均值,然后加回基数:
select date '2000-01-01' + avg(dateOfTransaction - date '2000-01-01') * interval '1 day'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.