Seite 1 von 1

2 Datenfelder (datum/uhrzeit) zu einem (datetime) zusammenfü

Verfasst: 06.08.2008 14:15
von CyberNibbler
Hallo,

ich habe eine MySQL-Datenbanktabelle, in welcher ich Datum und Uhrzeit gespeichert habe.
Dummerweise habe ich das vor langer Zeit unklug angestellt.
Das Datum ist im Feld datum als Typ varchar(10) (Beispiel 06.08.2008) und die Uhrzeit ist im Feld uhrzeit als Typ varchar(8) (Beispiel: 14:00:00) gespeichert.
Ich habe gehört, dass es effektivier ist, dies im datetime Format zu speichern.
Nun habe ich ein neues Feld mit dem Namen datetime vom Typ datetime erstellt und will die Informationen aus den Feldern Datum und Uhrzeit in das datetime Feld übertragen.

Ich habe dies mit folgendendem Code versucht, doch leider klappt dies nicht.
UPDATE zugriff SET datetime = (SELECT CONCAT(SUBSTRING(datum, -4), '-', SUBSTRING(datum, 4, 5), '-', SUBSTRING(datum, 1, 2), ' ', uhrzeit))
phpMyAdmin gibt mir dann nur folgendes aus:
Betroffene Datensätze: 0 (die Abfrage dauerte 0.0007 sek.)
Auch wenn ich es mit folgendem SQL-code ausprobiere.
UPDATE zugriff SET datetime = (SELECT CONCAT(SUBSTRING(datum, -4), '-', SUBSTRING(datum, 4, 5), '-', SUBSTRING(datum, 1, 2), ' ', uhrzeit)) WHERE datum='06.08.2008'
Sind keine Datensätze betroffen. Und es befinden sich auf jeden Fall Datensätze vom Feld datum mit dem Wert 06.08.2008 in der Tabelle.

Was mache ich falsch?
Wie kann ich die 2 Datenfelder zu dem einem zusammenfügen?

Verfasst: 06.08.2008 16:06
von BB-BF-BM
Hallo!

Die MySQL-Funktion SUBSTRING erwartet als dritten Parameter die Länge, nicht den Index des letzten Zeichens.

Code: Alles auswählen

SELECT CONCAT(SUBSTRING(datum, -4), '-', SUBSTRING(datum, 4, 5), '-', SUBSTRING(datum, 1, 2), ' ', uhrzeit) FROM `zugriff`
gibt so etwas aus wie 2008-01.20-31 10:59:00

Code: Alles auswählen

SELECT CONCAT(SUBSTRING(datum, -4), '-', SUBSTRING(datum, 4, 2), '-', SUBSTRING(datum, 1, 2), ' ', uhrzeit) FROM `zugriff`
hingegen gibt folgendes aus: 2008-01-31 10:59:00

Folgender Code sollte also funktionieren:

Code: Alles auswählen

UPDATE zugriff SET datetime = CONCAT(SUBSTRING(datum, -4), '-', SUBSTRING(datum, 4, 2), '-', SUBSTRING(datum, 1, 2), ' ', uhrzeit)

Verfasst: 06.08.2008 16:12
von CyberNibbler
Ah, vielen Dank, BB-BF-BM. :)

Also war das SELECT falsch & die 5. ^^