varchar() -> date Formatieren bei Import

AlexD1979

Erfahrenes Mitglied
varchar -> date / Formatieren bei Import

Hallo,
Ich habe eine csv-Datei, in der sich mehrere Felder befinden.
Unter anderem ein Feld Date, wo momentan ein Datumswert in dem Format "mm/yy" steht.

Wie bekomme ich nun dieses Feld Date in meine Datenbank in ein Date-Feld mit dem Format dd/mm/yy besser noch dd/mm/yyyy da auch Einträge aus 99 vorhanden sind.?

Erster Weg war, das Date-Feld in der DB als varchar zu machen und dann nachträglich das Format auf Date zu ändern. Danach irgendwie mit "Alter Table set neuerwert where alterwert" die Werte umsetzen nur ich weiß nicht wie man einen SQL mit Variablen schreibt, sonst müßte ich das ja per Hand für jede Zeile machen! Gibt es denn eine Lösung ähnlich wie ich sie angedacht habe

Nächster Ansatz war über die Excel-Tabelle vor dem Import zu ändern, aber das geht auch nicht so wirklich, weil ich nicht weiß. welches Format das Date-Feld erwartet.

Wer kann mir da einen kleinen Denkanstoß geben?

edit 11:36

Inzwichen habe ich es hinbekommen, dass die Daten in der DB als Datum angezeigt werden allerdings in der Form: 30. November 1999 um 00:00
Ich habe einfach in Phpmyadmin über die Tabelle, ändern des Feldes angeklickt. Da gibt es am Ende die Option Umwandlungsoptionen dort konnte man von plain/text nach date umwandeln, was er auch gemacht hat
Das ist unbefriedigend. Kann ich das DATE - Feld dahingehend formatieren das er mir zurückliefert yyyy-mm-dd ?
 
Zuletzt bearbeitet:
Hallo!

Ich hatte mal ein ähnliches Problem mit einer Textdatei, bei dem das Datum in
der Art dd.mm.yyyy angegeben war.
Und in der MysqlDatenbank ist es ja Standardmässig im Format yyyy.mm.dd
(was man übrigens nach meinem Wissen nicht ändern soll).

Ich bin folgendermassen vorgegangen:

1.) die CSV-Datei normal importiert.
2.) eine neue Spalte mit Datum und der richtigen Formatierung angelegt.
3.) ein kleines PHP-script gemacht, das das Datum aus der alten Spalte ausliest
und in geänderter Form in die neue Spalte reinschreibt.

Leider habe ich nicht mehr das fertige Script gefunden. Nur mehr eine Datei zum
ausprobieren. Ich stell Sie dir mal her und hoffe du kommst klar damit. Ansonsten
nochmal fragen ok.

PHP:
<?
// Hier wird die Verbindung zur Datenbank aufgebaut
require("connect.php");

// Hier die Funktion mit der das Datum umgewandelt wird, die habe ich übrigens auch von tutorials.de
function date_german2mysql($datum) {
    			list($tag, $monat, $jahr) = explode(".", $datum);
			    return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag);
				}
//die Abfrage
@$outcome=mysql_query("SELECT id, beerdigtam FROM verstorbene ");

// wenn ein Fehler ist
require("failure.php");

$access=mysql_fetch_array($outcome);
$id=$access["id"];
$datum=$access["beerdigtam"];

// das geänderte Datum
$datumneu=date_german2mysql($datum);
	

// und jetzt das geänderte Datum mittels update in die neu angelegte Spalte schreiben.
// und natürlich in einer Schleife laufen lassen.

?>

Das ganze gehört natürlich noch auf deine Bedürfnisse angepasst, aber als
Denkanstoß hilft es sicher.

mfg Hoizwurm
 
Hallo,
für den Fall, das dieser Import eine einmalige Sache ist kannst Du auch Deine Datei durch Access und Excel formatieren lassen.
Das hab ich jedenfalls einmal ganz erfolgreich praktiziert.

Mfg Lordrin
 
Hallo
Mit Excel umformatieren? Wiw bekomme ich das denn hin?

Wenn ich die Spalte markiere und sage, mache mir ein Date mit dem benutzerdefinierten Format yyyy-mm-dd kann er das nicht.
Die Datengrundlage ist ja auch mm/yy

Gruß
alex
 
Hallo Alex,
Mit Excel umformatieren? Wiw bekomme ich das denn hin?

Wenn die Excel-Spalte ein echtes Datum enthält und nur mit "MM/JJ" formatiert ist, dann kann man die Spalte umformatieren in "JJJJ-MM-TT" (Benutzerdefinierte Formatierung).

Wenn es sich allerdings um einen Text handelt, dann muss man eine neue Spalte einfügen und mit einer Formel ähnlich
=RECHTS(A1; 2) & "-" & LINKS(A1; 2) & "-" & "01"
die Daten in die neue Spalte holen. Dann die Spalte markieren und durch "Kopieren, Inhalte einfügen, Werte" die Formeln durch die Werte ersetzen, danach kann man die Originalspalte löschen.

Vielleicht hilft's.

Grüße aus dem Allgäu

Edit: Die o.g. Excelformel liefert nur ein 2stelliges Jahr. Besser so:
Code:
=WENN(WERT(RECHTS(A1; 2))>70; "19" & RECHTS(A1; 2); "20" & RECHTS(A1; 2)) & "-" & LINKS(A1; 2) & "-01"
 
Zuletzt bearbeitet:
Zurück