SELECT Abfrage mit Datumsformatierung

exzel

SQL-Guru
Beiträge
170
Hallo zusammen,

bis jetzt habe ich folgenden SELECT-Befehl verwendet um Kundendaten abzufragen.

$vn=$mysqli->query("SELECT * FROM persdaten WHERE id_betreuer = '$uid' AND id_vn='{$_SESSION['kundenauswahl']}';");

Soweit so gut, aber es gibt auch Spalten, die im Format date vorliegen. Da diese im Format yyy-mm-dd vorliegen, diese aber in deutsch ausgegeben werden sollen, möchte ich über DATE_FORMAT die Umwandlung durchführen lassen, bevor die Ausgabe über PHP erfolgt. Ist es möglich in diesem Befehl die Funktion DATE_FORMAT unterzubringen oder muss ein neuer SELECT-Befehl erstellt werden?

Gruß
 
Werbung:
Hallo exzel,

das * musst du durch dann natürlich durch die Spaltennamen deiner Tabelle ersetzten.

Sonst kannst du alles reinschreiben was mySQL erlaubt.

Beispiel:

$vn=$mysqli->query("SELECT DATE_FORMAT(<Datumsspalte>,GET_FORMAT(DATE,'EUR')) datum FROM persdaten WHERE id_betreuer = '$uid' AND id_vn='{$_SESSION['kundenauswahl']}';");

Muss natürlich noch um die anderen Spalten ergänzt und getestet werden.:)

Gruß Charly
 
Hallo Charly,

vielen Dank für die Antwort! Ich muss nochmal nachfragen. Ich muss also die Spaltennamen einzelnen aufführen? Es ist also nicht möglich den * mit den Date formatierten Spalten zu kombinieren.

Wenn das so wäre, dann ist es wahrscheinlich effektiver die Datumsformatierung über einen gesonderten SELECT-Befehl durchzuführen, da es sich nur um ein paar Datumsspalten handelt.

Gruß
 
Hallo exzel,

mySQL-Version: 5.5.12

CREATE TABLE test (a int, b int, c date);
INSERT INTO test values(1,2,'2011.06.17');
SELECT *, DATE_FORMAT(c,GET_FORMAT(DATE,'EUR')) datum from test;

geht.

Ergebnis:
1, 2, 2011-06-17, 17.06.2011

Gruß Charly
 
Das ist ja grässlich! Fang Dir doch so einen Stil gar nicht erst an!

Viele Applikationen haben klein begonnen, da war der schlechte Code noch egal, dann wächst die Applikation und die Datenmengen werden grösser und plötzlich ist es nicht mehr egal ob man sauber programmiert hat und ob die Abfrage schnell ist oder langsam.

Besser als ein SELECT * ist es, die benötigten Spalten einzeln anzugeben, dann werden nicht unnötig Daten übers Netzwerk auf die Reise geschickt. Faulheit war noch nie ein guter Ratgeber :)
 
Hallo und danke für die Antwort!

@Charly: Ich werde es ausprobieren und mich nochmals melden.

@Walter: Wenn aber tatsächliche eine jede Spalte der Tabelle benötigt wird? Ist es dann dennoch besser jeden Spaltennamen einzeln anzugeben?

Gruß
 
Hallo zusammen,

der richtige Weg ist eine neue Abfrage erstellen und die Alte stehen lassen. Dann gibt es keine Probleme wenn die alte Abfrage noch irgendwo verwendet wird.

@Walter: Er wollte doch nur wissen ob es so geht. Entscheiden, ob man es dann auch so macht, muss jeder für sich selber.

Gruß Charly
 
Hallo und danke für die Antworten!

@charly

Du hast in deiner Select-Abfrage

SELECT *, DATE_FORMAT(c,GET_FORMAT(DATE,'EUR')) datum from test;

geschrieben.

Aber woher kommt datum? Du hast drei Spalten a,b,c definiert?

Gruß
 
Hallo exzel,

datum ist ein Alias für die umformatierte Spalte.

Beispiel: SELECT 1 + 2 Ergebins

Das AS weg zu lassen wa lediglich Schreibfaul von mir.:)

Sauber ist: SELECT 1 + 2 AS Ergebins.

mySQL versteht es aber auch ohne AS.

Gruß Charly
 
Werbung:
Hallo zusammen,

hier nun das Endergebnis.

$vn=$mysqli->query("SELECT *,DATE_FORMAT(gebdatum,GET_FORMAT(DATE,'EUR')) AS gebdatum FROM persdaten WHERE id_betreuer = '$uid' AND id_vn='{$_SESSION['kundenauswahl']}';");

oder

$vn=$mysqli->query("SELECT *,DATE_FORMAT(gebdatum,'%d.%m.%Y') AS gebdatum FROM persdaten WHERE id_betreuer = '$uid' AND id_vn='{$_SESSION['kundenauswahl']}';");

Soweit so gut, aber jetzt muss das ganze noch in von der Eingabemaske in die Datenbank zurück, wenn der Anwendern eine Eingabe wie 11.11.1990 gemacht hat.

UPDATE Tabelle SET gebdatum = STR_TO_DATE('11.11.1990','%d.%m.%Y');
Das Datum muss eben dann noch durch die Variable ersetzt werden
UPDATE Tabelle SET gebdatum = STR_TO_DATE('{$_SESSION['gebdatum']}','%d.%m.%Y');
Recht herzlichen Dank!
 
Zurück
Oben