简体   繁体   English

如何在 oracle 中找到具有日期数据类型的特定列的平均值? 我希望平均值为 NUMBER 数据类型

[英]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.

相关问题 Money数据类型的平均值 - Average value for Money Datatype 如何使用PL-SQL在Oracle中获取列数据类型 - How do I get column datatype in Oracle with PL-SQL 如何获取SQL中列的平均日期间隔? - How do I get the average date interval of a column in SQL? 我有一个数据类型为nvarchar的列,我想按升序对其进行排序。 如何在SSRS中实现? - I have a column with datatype nvarchar and I want to sort it in ascending order. How do I achieve it in SSRS? Postgres SQL:如何在更改平均值的现有值后重新计算平均值 - Postgres SQL : how do I recalculate average value, after an existing value from the average has been changed 如何返回最大滚动平均值的日期范围? - How do I return the date range of a max rolling average value? 如何获得每个相似列值的平均值? - How do I get the average of each similar column value? 如何将Char(16)列转换为Date数据类型列? - How can I convert a Char(16) column into a Date Datatype column? 将两个分别具有小时(数据类型编号)和分钟(数据类型编号)的列转换为时间数据类型,并在oracle中减去90分钟 - cast two separate columns which has hour ( datatype number) and minutes ( datatype number) to time datatype and subtract 90 minutes in oracle 如何在 DATE 数据类型列中插入 DDMMYYYY 值 - How to insert DDMMYYYY value in DATE datatype column
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM