Horst Reinelt: MySQL: Zeitdifferenz ermitteln

Hallo Forumler,

ist es wirklich so, dass es innerhalb von SQL keine "eingebaute" Funktion zum Berechnen von Zeitwerten (im TIME-Format) gibt?
Damit meine ich z. B.:
zeit2 - zeit1 => differenz
17:20:00 - 10:50:00 => 06:30:00

Tasächlich führt das SELECT ...
 select zeit1, zeit2, zeit2-zeit1 from test;
zu:
+----------+----------+-------------+
| zeit1    | zeit2    | zeit2-zeit1 |
+----------+----------+-------------+
| 10:50:00 | 17:20:00 |       67000 |
+----------+----------+-------------+

Ich kann natürlich erst einmal die beiden Zeitwerte abfragen und dann z. B. mit Perl weiter bearbeiten.
Aber wenn man bedenkt, dass man sich zu jeder Datumsangabe sogar einen Wochentag mittels SQL geben lassen kann, wäre die Tatsache, dass eine Berechnung wie oben genannt nicht möglich ist, schon etwas enttäuschend :-(

Vielleicht weiß ja jemand mehr.

Danke und ciao
  Horst

  1. use Mosche;

    ist es wirklich so, dass es innerhalb von SQL keine "eingebaute" Funktion zum Berechnen von Zeitwerten (im TIME-Format) gibt?

    select zeit1, zeit2, zeit2-zeit1 from test;
    | zeit1    | zeit2    | zeit2-zeit1 |
    | 10:50:00 | 17:20:00 |       67000 |

    67000 sec sind etwa 18,5 Stunden, bist du sicher, was deine Zeitangaben angeht. Du scheinst a) die größere Zeit von der kleineren abzuziehen, da kommen dann -17,5 Stunden bei raus und bei den Zeiten was falsch eingegeben zu haben. 67000 müssten aber Sekunden sein.

    use Tschoe qw(Matti);

    --
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    1. Hi!

      67000 sec sind etwa 18,5 Stunden, bist du sicher,
      was deine Zeitangaben angeht.

      Zur Erläuterung hier noch der gesamte Syntax für meine MySQL-DB:

      CREATE TABLE test (zeit1 TIME, zeit2 TIME);
      SELECT zeit1, zeit2, zeit2-zeit1 from test;
      +----------+----------+-------------+
      | zeit1    | zeit2    | zeit2-zeit1 |
      +----------+----------+-------------+
      | 10:50:00 | 17:20:00 |       67000 |
      +----------+----------+-------------+

      Dass 67000 = 172000 - 105000 ist, ist mir schon klar. Aber wie sage ichs nun mit SQL, dass ich das nicht will?
      Im Ernst: Weiß jemand, ob Zeit-Berechnungen in SQL (bzw. MySQL) integriert sind?
      Das heißt, dass bei obiger Berechnung eben 06:30:00 herauskommt.

      Ich gebe zu, dass ich da vielleicht noch ein Verständnisproblem habe, aber eine integrierte Funktion ohne größere Nachberechnungen außerhalb der Datenbank hatte ich halt einfach erwartet.

      Ciao
        Horst

      1. Hallo,

        Zur Erläuterung hier noch der gesamte Syntax für meine MySQL-DB:

        CREATE TABLE test (zeit1 TIME, zeit2 TIME);
        SELECT zeit1, zeit2, zeit2-zeit1 from test;
        +----------+----------+-------------+
        | zeit1    | zeit2    | zeit2-zeit1 |
        +----------+----------+-------------+
        | 10:50:00 | 17:20:00 |       67000 |
        +----------+----------+-------------+

        Dass 67000 = 172000 - 105000 ist, ist mir schon klar. Aber wie sage ichs nun mit SQL, dass ich das nicht will?
        Im Ernst: Weiß jemand, ob Zeit-Berechnungen in SQL (bzw. MySQL) integriert sind?
        Das heißt, dass bei obiger Berechnung eben 06:30:00 herauskommt.

        Jetzt weiß ich wieder, wehalb ich MySQL nicht mag. Ofensichtlich musst Du

        SELECT zeit1, zeit2, SEC_TO_TIME(TIME_TO_SEC(zeit2) - TIME_TO_SEC(zeit1)) from test;

        verwenden.
        http://www.mysql.de/doc/de/Date_and_time_functions.html
        *brr*
        <ironie>Klar, Zeit1 - Zeit2 sollte auch _unbedingt_ alles Andere sein, nur nicht die Differenz in Sekunden. Zumal man ja im Time-Format auch keine höhere Genauigkeit als Sekunden angeben kann.</ironie>

        viele Grüße

        Axel

        1. Hallo!

          Jetzt weiß ich wieder, wehalb ich MySQL nicht mag. Ofensichtlich musst Du

          SELECT zeit1, zeit2, SEC_TO_TIME(TIME_TO_SEC(zeit2) - TIME_TO_SEC(zeit1)) from test;

          verwenden.

          Das wars - damit kann ich leben - super - danke!

          Tschüss
            Horst