Zeiten berechnen mit MySQL
Dani
- datenbank
0 Sven Rautenberg0 Dani
0 Tobias Kloth0 Dani0 Tobias Kloth0 Dani
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
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
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
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
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
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
Hab die 4.1.1 und es funktioniert! Danke!