Malte: DATE Formatierung

Hallo,

habe folgendes Statement

SELECT
 IF(anfang < CURRENT_DATE(),CURRENT_DATE,anfang) as beginn,
FROM
 veranstaltung
WHERE
 ...

ich habe alles als DATE abgespeichert. Gerne würde ich "beginn" natürlich folgendermaßen formatieren:
SELECT
 ...as DATE_FORMAT(beginn,'%d.%m.%Y'),
FROM

Aber da bekomme ich immer eine Fehlermeldung:
"MYSQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATE_FORMAT(anfang,'%d.%m.%Y'),"

Kann mir jemand helfen, wie ich IF Block und eine schicke Ausgabe des Datums gleichzeitig hinbekomme?

Gruß,
Malte

  1. Hallo Malte,

    IF(anfang < CURRENT_DATE(),CURRENT_DATE,anfang) as beginn,

    Müssen bei dem zweiten CURRENT_DATE nicht auch Klammern hin?

    Viele Grüße,

    Stefan

  2. Hallo Malte,

    grundsätzlich ist es eine gute Idee, das verwendete Datenbankmanagementsystem (DBMS) inklusive Versionsangabe (bei MySQL besonders wichtig) anzugeben. Glücklicherweise verriet die Fehlermeldung, dass es sich um MySQL handelt - und Dein Problem ist unabhängig von der Version :-)

    habe folgendes Statement

    SELECT
    IF(anfang < CURRENT_DATE(),CURRENT_DATE,anfang) as beginn,
    FROM
    veranstaltung
    WHERE
    ...

    SELECT
    ...as DATE_FORMAT(beginn,'%d.%m.%Y'),
    FROM

    Ja natürlich kann das so überhaupt nicht gehen, denn

    DATE_FORMAT(beginn,'%d.%m.%Y')

    ist kein zulässiger Spaltenname.
    Du willst ja auch nicht den Spaltennamen ändern, wofür AS gut ist,
    sondern die Formatierung des Inhalts der Spalte:

    SELECT  
        IF( anfang < [link:http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#id3145406@title=CURRENT_DATE],  
            DATE_FORMAT(CURRENT_DATE, '%d.%m.%Y'),  -- Formatiere den Inhalt  
            DATE_FORMAT(anfang, '%d.%m.%Y')         -- Formatiere den Inhalt  
        ) AS beginn                                 -- der nette Name  
    FROM veranstaltung  
    WHERE ...
    

    @alpman:
    CURRENT_DATE und CURRENT_DATE() sind Synonyme, somit sind beide Schreibweisen richtig. Es ist meiner Meinung jedoch kein guter Stil, die Schreibweisen zu mischen.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      herzlichen Dank - so funktioniert es eindwandfrei.

      Ja - richtig MySQL ;-). Sorry - ich war so auf das Problem fixiert, dass ich das Wichtigste vergessen habe ;-).

      Vielen Dank,
      Malte

      SELECT

      IF( anfang < [link:http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#id3145406@title=CURRENT_DATE],
              DATE_FORMAT(CURRENT_DATE, '%d.%m.%Y'),  -- Formatiere den Inhalt
              DATE_FORMAT(anfang, '%d.%m.%Y')         -- Formatiere den Inhalt
          ) AS beginn                                 -- der nette Name
      FROM veranstaltung
      WHERE ...

    2. echo $begrüßung;

      SELECT

      IF( anfang < [link:http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#id3145406@title=CURRENT_DATE],
              DATE_FORMAT(CURRENT_DATE, '%d.%m.%Y'),  -- Formatiere den Inhalt
              DATE_FORMAT(anfang, '%d.%m.%Y')         -- Formatiere den Inhalt
          ) AS beginn                                 -- der nette Name
      FROM veranstaltung
      WHERE ...

        
      Da ja das Ergebnis der IF-Funktion vom Typ DATE ist, kann man die Formatierung auch auf dieses Ergebnis ansetzen. So spart man sich eine Änderungsstelle, falls man das Format mal ändern will.  
        
      SELECT DATEFORMAT(IF(...), '...') AS beginn ...  
        
      (Außerdem kommt so ein klein wenig klarer zum Ausdruck, dass man das Ergebnis formatiert haben möchte, und nicht etwa zwei unterschiedliche Formatierungen. Dass die Formatierung dann doch gleich ist, sieht man ja erst nachdem man die beiden Formatierungsstrings verglichen hat.)  
        
        
      echo "$verabschiedung $name";