Dani: Zeiten berechnen mit MySQL

Hallo,

ist sowas in der Art irgendwie mölich:

update tabelle set beginn=(select beginn+'00:0:10') where ID=103

Sprich, ich will ein Datum z. B. um 15min erhöhen, ohne Programmieraufwand, nur SQL. Geht das irgendwie?

Folgender Befehl funktioniert, solange bis ein Minutenumbruch erfolgt:

update tabelle set beginn=(select beginn+'10') where ID=103

Sobald man diesen Befehl also 6x ausgeführt hat, erhält man eine Fehlermeldung: Data truncated for column 'Beginn' at row 1

  1. Moin!

    ist sowas in der Art irgendwie mölich:

    update tabelle set beginn=(select beginn+'00:0:10') where ID=103

    Problemlos, wenn du die richtigen Befehle, Spaltentypen und Funktionen verwendest.

    Erstens: Die korrekte Syntax lautet

      
    update tabelle set beginn = beginn + 15 where id=103  
    
    

    für allgemeine Addition von 15 zu einem bestehenden Wert.

    Zweitens: MySQL kennt die Datentypen DATE, TIME, DATETIME und TIMESTAMP, welche zur Verarbeitung von "Zeit" geeignet sind. Bitte keine Experimente mit irgendwelchen Integern oder Stringtypen.

    Drittens: MySQL kennt Funktionen zur Addition und Subtraktion von Zeit.

    Das alles zusammen ergibt dann problemlos einen passenden SQL-Befehl zur Addition von 15 Minuten auf die aktuelle Zeit.

    - Sven Rautenberg

    1. Drittens: MySQL kennt Funktionen zur Addition und Subtraktion von Zeit.

      Hab keine gefunden, nur zur Addition von DateTime:

      http://dev.mysql.com/doc/mysql/de/date-and-time-functions.html

  2. Hallo Dani,

    Sprich, ich will ein Datum z. B. um 15min erhöhen, ohne Programmieraufwand, nur SQL. Geht das irgendwie?

    Das sollte auch ohne Subselects funktionieren, versuch es mal mit:
     UPDATE tabelle SET beginn = DATE_ADD(beginn,INTERVAL 15 MINUTE) WHERE id = 103
    (ungetestet)

    Grüße aus Nürnberg
    Tobias

    1. UPDATE tabelle SET beginn = DATE_ADD(beginn,INTERVAL 15 MINUTE) WHERE id = 103

      Danke, aber diese Funktion Date_Add benötigt als Parameter DateTime, meine Spalte hat den Datentyp time.

      Das hier funktioniert:
      UPDATE tabelle SET beginn = DATE_ADD("1997-12-31 23:50:50",INTERVAL "1:1" MINUTE_SECOND) WHERE ID = 104

      Als wert steht dann in der Zeile: 23:51:51, das Datum steht nicht drin, da der Datentyp für die Splate time ist.

      Das geht nicht nicht
      UPDATE tabelle SET beginn = DATE_ADD("23:50:50",INTERVAL "1:1" MINUTE_SECOND) WHERE ID= 104

      1. Hallo Dani,

        UPDATE tabelle SET beginn = DATE_ADD(beginn,INTERVAL 15 MINUTE) WHERE id = 103
        Danke, aber diese Funktion Date_Add benötigt als Parameter DateTime, meine Spalte hat den Datentyp time.

        Welche MySql-Version verwendest du denn? Wenn du eine Version >=4.1.1 hast, könntest du ADDTIME() verwenden - wenn nicht musst du vmtl. mit TIME_TO_SEC() und SEC_TO_TIME() arbeiten, um die Zeit erst in Sekunden umzuwandeln, die gewünschte Zeit (in Sekunden) zu addieren und wieder in eine Zeit umzuwandeln.

        Grüße aus Nürnberg
        Tobias

        1. Hab die 4.1.1 und es funktioniert! Danke!