MySQL: Varchar in Timestamp ändern
roadrunnder123
- datenbank
0 wahsaga0 Vinzenz Mai
Hallo,
hat jemand eine Idee, wie ich in einer MySQL-Tabelle die Einträge einer Spalte vom Typen Varchar in Timestamp am einfachsten ändere?
Als ich die Tabelle eingerichtet habe, habe ich provisorisch / aus Faulheit das Datum als Zeichenkette angelegt (z.B. "01.01.2006"). Nun hat die Tabelle ca 90 Einträge. Ich möchte das Datum als Timestamp haben, um entsprechende Funktionen nutzen zu können.
Muss ich jetzt alle Einträge manuell ändern (neue Timestamp-Spalte anlegen und diese per Hand für jede Zeile füllen)? Oder gibt's da eine andere schlaue Möglichkeit?
hi,
Als ich die Tabelle eingerichtet habe, habe ich provisorisch / aus Faulheit das Datum als Zeichenkette angelegt (z.B. "01.01.2006"). Nun hat die Tabelle ca 90 Einträge. Ich möchte das Datum als Timestamp haben, um entsprechende Funktionen nutzen zu können.
Wieso TIMESTAMP, wenn du nur ein Datum hast? Dann doch eher DATE.
Muss ich jetzt alle Einträge manuell ändern (neue Timestamp-Spalte anlegen und diese per Hand für jede Zeile füllen)? Oder gibt's da eine andere schlaue Möglichkeit?
Lege die neue DATE-Spalte an, und fülle sie per UPDATE mit den Werten aus der VARCHAR-Spalte.
Da das Format, welches du ursprünglich gewählt hast, kein gültiges DATE-Format ist, musst du es dabei natürlich umformatieren -> Stringfunktionen und ggf. Datums-/Zeitfunktionen im Manual anschauen.
Alternativ natürlich auch per PHP-Script o.ä. möglich - Daten auslesen, jeden Satz mit umformatiertem Datum in der neuen Spalte wieder einfügen.
gruß,
wahsaga
Hallo
hat jemand eine Idee, wie ich in einer MySQL-Tabelle die Einträge einer Spalte vom Typen Varchar in Timestamp am einfachsten ändere?
welche MySQL-Version? Da hat sich mal in Sachen TIMESTAMP was getan (4.1)
Als ich die Tabelle eingerichtet habe, habe ich provisorisch / aus Faulheit das Datum als Zeichenkette angelegt (z.B. "01.01.2006"). Nun hat die Tabelle ca 90 Einträge. Ich möchte das Datum als Timestamp haben, um entsprechende Funktionen nutzen zu können.
Bist Du Dir sicher, dass Du die Funktionalität von TIMESTAMP benötigst, oder reicht Dir nicht ein normaler DATETIME- oder DATE-Datentyp?
Siehe Dir dazu den Handbuchabschnitt TIMESTAMP an.
Muss ich jetzt alle Einträge manuell ändern
Nein.
(neue Timestamp-Spalte anlegen
Ja, das solltest Du (oder DATE-Spalte oder DATETIME-Spalte).
und diese per Hand für jede Zeile füllen)?
Nein.
Oder gibt's da eine andere schlaue Möglichkeit?
Ja, die UPDATE-Anweisung. Wie es genau geht, das hängt von Deiner MySQL-Version ab :-)
Grundsätzlich sollten die Datums- und Zeitfunktionen von MySQL im Zusammenspiel mit der UPDATE-Anweisung (nach Ausführen eines Backups und eines ALTER TABLE) hilfreich sein. Nach dem UPDATE kannst Du dann (mit ALTER TABLE) die nicht mehr benötigte alte VARCHAR-Spalte löschen - und falls Du das willst die neue Spalte so benennen wie früher die VARCHAR-Spalte hieß.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
danke erstmal für deine Antwort. Ich benutze MySQL 5.0.18. Ich benötige eigentlich nur relativ einfache Funktionen, wie das Auslesen der neuesten Eintäge (z.B. die 3 neuesten Zeilen) und des Datums selber (aus eine Java-Anwendung heraus). Wäre dazu DATETIME besser?
Hallo
danke erstmal für deine Antwort. Ich benutze MySQL 5.0.18. Ich benötige eigentlich nur relativ einfache Funktionen, wie das Auslesen der neuesten Eintäge (z.B. die 3 neuesten Zeilen) und des Datums selber (aus eine Java-Anwendung heraus). Wäre dazu DATETIME besser?
zunächst stellt sich die Frage, ob Du das Besondere an TIMESTAMP benötigst:
_genau eine_ TIMESTAMP-Spalte in einer Tabelle _kann_ automatisch beim INSERT, beim UPDATE oder bei beiden Operationen mit dem Zeitpunkt der Operation gefüllt bzw. aktualisiert werden. Darum kümmert sich das Datenbankmanagementsystem.
Benötigst Du diesen Zauber nicht oder ist der Zauber sogar ganz und gar unerwünscht, dann solltest Du DATE oder DATETIME verwenden. Da Du bisher ohne Zeitangabe allein mit dem Datum ausgekommen bist, steht zu vermuten, dass Du auch zukünftig allein mit dem Datum auskommen wirst. In diesem Fall wäre DATE, wie bereits wahsaga schrieb, der angemessene Datentyp.
Freundliche Grüße
Vinzenz