Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Tage zwischen 2 Datumsfeldern erlmitteln

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Squall_Titus, 4 Februar 2013.

  1. Squall_Titus

    Squall_Titus Benutzer

    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?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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
     
  3. Tommi

    Tommi Datenbank-Guru

    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
     
    ukulele gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden