Tage zwischen 2 Datumsfeldern erlmitteln

Squall_Titus

Benutzer
Beiträge
13
Ich habe eine Spalte im Datetime Format (nenne wir Sie Datumvon) und eine Spalte im Date-Format (Datumbis)
ich möchte jetzt die Anzahl der Tage herausfinden, die dazwischen liegen.
Das über die gesamte Tabelle und am Ende ein Durchschnitt.

So nach dem Motto alles was du je gemacht hat hat durchschnittlich XX Tage gedauert.

Und Nun?
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.851
Ich habe eine Spalte im Datetime Format (nenne wir Sie Datumvon) und eine Spalte im Date-Format (Datumbis)
ich möchte jetzt die Anzahl der Tage herausfinden, die dazwischen liegen.
Das über die gesamte Tabelle und am Ende ein Durchschnitt.

So nach dem Motto alles was du je gemacht hat hat durchschnittlich XX Tage gedauert.

Und Nun?


Was, und nun? Nun sollten wir erraten, was Dein Problem ist?

Code:
test=*# create table titus (id serial, von timestamp, bis date);
NOTICE:  CREATE TABLE will create implicit sequence "titus_id_seq" for serial column "titus.id"
CREATE TABLE
Time: 300,826 ms
test=*# insert into titus (von,bis) values ('2013-01-20 10:00:00','2013-01-30');
INSERT 0 1
Time: 19,764 ms
test=*# insert into titus (von,bis) values ('2013-01-25 22:00:00','2013-01-28');
INSERT 0 1
Time: 0,178 ms
test=*# insert into titus (von,bis) values ('2013-01-28 07:00:00','2013-02-02');
INSERT 0 1
Time: 0,174 ms
test=*# select id, von, bis, bis - von::date from titus;
 id |         von         |    bis     | ?column?
----+---------------------+------------+----------
  1 | 2013-01-20 10:00:00 | 2013-01-30 |       10
  2 | 2013-01-25 22:00:00 | 2013-01-28 |        3
  3 | 2013-01-28 07:00:00 | 2013-02-02 |        5
(3 rows)

Time: 16,027 ms
test=*# select avg(bis - von::date) from titus;
        avg
--------------------
 6.0000000000000000
(1 row)

Time: 13,641 ms

richtig geraten?


Andreas
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
290
Hi,

auf dem SQL-Server ist die Funktion zur Ermittlung von Zeitunterschieden folgende:
Code:
DATEDIFF (day, DatumVon, DatumBis)

Hier musst du aber beschten, dass es auch zu negativen Werte kommen kann (DatumBis < DatumVon) und dass eine Differenz von Tagen =0 ist, wenn DatumVon = DatumBis.
So etwas musst du dann noch in einer CASE ... WHEN - Klausel abfangen, wenn das notwendig ist.

Über die mit DATEFDIFF berechnete Spalte läßt sich dann natürlich auch eine Aggregatfunktion benutzen.

Code:
 SELECT AVG ( DATEDIFF (day, DatumVon, DatumBis) ) as Dauer FROM Tabelle

Viele Grüße,
Tommi
 
Oben