1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SELECT Abfrage mit Datumsformatierung

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von exzel, 17 Juni 2011.

  1. exzel

    exzel Datenbank-Guru

    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ß
     
  2. Charly

    Charly Datenbank-Guru

    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
     
  3. exzel

    exzel Datenbank-Guru

    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ß
     
  4. Charly

    Charly Datenbank-Guru

    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
     
  5. Walter

    Walter Administrator Mitarbeiter

    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 :)
     
  6. exzel

    exzel Datenbank-Guru

    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ß
     
  7. Charly

    Charly Datenbank-Guru

    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
     
  8. Walter

    Walter Administrator Mitarbeiter

    Wozu schlechte Gewohnheiten einlernen? Und was, wenn zur Tabelle in Zukunft 10 Spalten dazukommen, dann liest Du 10 Spalten zuviel ein.
     
  9. exzel

    exzel Datenbank-Guru

    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ß
     
  10. Charly

    Charly Datenbank-Guru

    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
     
  11. exzel

    exzel Datenbank-Guru

    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!
     

Diese Seite empfehlen