[Oracle 10g] Timestamps addieren (sum)

looser512

Grünschnabel
hallo zusammen, ich habe hier folgendes problem und vllt könnt ihr mir ja dabei helfen.
Und zwar habe ich eine tabelle in der ich 2 timestamps eintrage. start und stop.

jetzt möchte ich alle die zeit summiert über einen tag mir ausgeben lassen.
hab mir das stmt jetzt mal so zusammengebastelt:

Code:
select (STOPTIME - STARTTIME) from TIMES where extract(day from STARTTIME) = extract(day from SYSTIMESTAMP);

das funktioniert soweit auch recht gut, nur bekomm ich die werte net addiert.
könnt ihr mir vllt bitte weiterfehlen?

vielen dank im voraus.
 
Die Aggregatsfunktionen von Oracle (SUM, AVG, etc.) können mit TIMESTAMPs nicht umgehen. Wenn Dir eine Genauigkeit von einer Sekunde reicht, kann man das hier:

Code:
select sum(tmp) 
from
(
	select to_date(to_char(stoptime, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') - 
		to_date(to_char(starttime, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') as tmp
	from ex01
)

als Workaround nehmen oder Du änderst den Datentyp in der Tabelle. Mit DATE-Werten arbeiten die Funktionen wie gewohnt.

Also etwas in der Art:

Code:
select sum(tmp) 
from
(
	select to_date(to_char(stoptime, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') - 
		to_date(to_char(starttime, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') as tmp
	from times 
        where extract(day from starttime) = extract(day from systimestamp)
)
 
Zuletzt bearbeitet:
hm, ne leider tut das net, er verschluckt mir immer die stunden, minuten und sekunden.
trotzdem vielen dank.
 
Code:
SQL> alter session set nls_timestamp_format = ''YYYY-MM-DD HH:MI:SS.FF';

Session altered.

SQL> create table ex01(starttime timestamp, stoptime timestamp);

Table created.

-- 120 sec (1/24/60/60 * 120)
SQL> insert into ex01 values (systimestamp, systimestamp + 0.0013889);

1 row created.

-- 3600 sec = 1 tag (1/24/60/60 * 3600)
SQL>  insert into ex01 values (systimestamp, systimestamp + 0.04167);

1 row created.

SQL> select * from ex01;

STARTTIME                      STOPTIME
------------------------------ ------------------------------
2006-05-18 11:19:15.841653     2006-05-18 11:21:15.000000
2006-05-18 11:19:48.480260     2006-05-19 12:19:48.000000

SQL> select sum(tmp)
2 from
3 (
4        select to_date(to_char(stoptime, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') -
5                to_date(to_char(starttime, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') as tmp
6        from ex01
7 );

  SUM(TMP)
----------
.043055556


-- 0.0430556/(1/24/60/60) = 3720 sec = 1 tag und 120 sekunden
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück