2009-07-11 1 views
0

Ich habe eine Tabelle mit 12 Timestamp-Spalten und 3 anderen Feldern. Ich kann den Feldtyp für die Timestamp-Spalten nicht ändern.Mehrere mySQL-Datumsfelder gleichzeitig formatieren

Ich muss alle 15 Felder für den Benutzer als m/d/y anzeigen. Gibt es eine Möglichkeit, sie alle gleichzeitig zu formatieren, ohne DATE_FORMAT auf jeden einzelnen anwenden zu müssen? Ich würde eher nicht tun müssen

SELECT DATE_FORMAT(field, '%c/%e/%y') AS field
für jeden, wenn möglich.

Ich benutze mySQL & PHP und mir ist es egal, wo die Konvertierung passiert.

Antwort

1

Sie können eine einfache Datumskonvertierungsroutine in PHP wie folgt schreiben:

function mysql2table($date) { 
    $new = explode("-",$date); 
    $a=array ($new[2], $new[1], $new[0]); 
return $n_date=implode("-", $a); 
} 

Was ich von hier stahl: http://www.daniweb.com/code/snippet736.html#

Dann einfach eine Schleife durch Ihre SQL-Spalte Ergebnisse zu überprüfen, ob der Wert ein Datum und umwandeln es.

+0

Danke ... das, was ich dachte, und es hilft, da ich bereits eine Datumsumwandlungsfunktion habe, die ich aufrufen kann ... Ich hatte auf eine All-in-One-Lösung gehofft ... na ja. – Jason

0

Ich denke nicht, dass es möglich ist, die Abfrage weiß nicht, welche Spalten sind, bis es die Ergebnisse zurückgibt, müssen Sie es sagen, um die Formatierung für jede Datetime zu ändern.

Matt

1

Haben Sie darüber nachgedacht, eine Datenbankschicht wie MDB2 oder PDO verwenden, die die Typen für Sie konvertieren? MDB2 hat einen Datumstyp, der das Format YYYY-MM-DD anzeigt, aber mit strftime und strtotime einfach in m/d/y umgewandelt werden kann.

Ein Beispiel für MDB2 mit:

$dsn = "mysql://[email protected]/db"; (not sure about DSN format, you might have to poke the MDB2 documentation) 
$connection = MDB2::connect ($dsn); 
$connection->loadModule ("Extended"); 
$rows = $connection->getAll ("your query", array ('date', ...), $parameters, array (paramater-types), MDB2_FETCHMODE_OBJECT); 

if (MDB2_Driver_Common::isError ($rows)) throw new Exception ("Error!"); 
else { foreach ($rows as $row) { ...Do something... } } 

Sie mehr Dokumentation bei MDB2 on InstallationWiki über die Verwendung von MDB auf diese Weise finden können. Dort finden Sie auch eine Liste der MDB2-Datentypen und deren Zuordnung zu Anzeigewerten. Auch wird Docs for MDB2_Extended eine gute Informationsquelle sein.

Edit: Natürlich müssen Sie strftime und strtotime für jede Zeile separat verwenden. Wenn Sie MDB2_FETCHMODE_OBJECT zu MDB2_FETCHMODE_ORDERED oder MDB2_FETCHMODE_ASSOC oben schalten, können Sie wahrscheinlich eine foreach-Schleife verwenden, um strftime und strtotime für alle Zeilen zu verwenden, die neu formatiert werden müssen.

+0

Danke ... Ich sah PDO - es ist einfach nichts, was ich gerade graben kann. – Jason

+0

Ah. Nun, ich hoffe, du hast Zeit, um sie zu untersuchen, sie können den Code viel einfacher machen. MDB2 kann sogar automatisch Aktualisierungen und Einfügungen für Sie durchführen, ohne dass Sie etwas SQL schreiben. Wählt wahrscheinlich auch, obwohl ich das bis jetzt noch nicht herausgefunden habe. :) –

Verwandte Themen