Phil: MYQL - Count & Datum Problem

Hallo Zusammen,

Ich schlage mich mit meiner MYSQL Datenbank rum. Habe ein Problem. In meiner Tabelle habe ich in der Variable "varb" ein Datum abgespeichert. Das Format des Datums: "5.4.2007" (varchar(20))

Nun kommen jeden Tag mehrere Einträge mit dem aktuellen Datum hinzu. Nun würde ich gerne alle Einträge zählen, die am heutigen Datum eingetragen wurden, das wollte ich wie folgt machen:

select count(*) from access where varb='DATE_FORMAT(curdate(), '%e.%c.%y')';

Nur leider erscheint hierbei immer eine Fehlermeldung, was mache ich falsch?

Danke und Gruss Phil

  1. moin,

    Nur leider erscheint hierbei immer eine Fehlermeldung, was mache ich falsch?

    Das Format des Datums: "5.4.2007" (varchar(20))

    varchar(20) ist der Käse. Nimm besser ein Format für Datums.

    --roro

    1. Hello

      Ja, das ist mir durchaus bewusst! Leider habe ich schon zuviele Daten in meiner Datenbank, wisst Ihr per Zufall wie der korrekte Befehl lauten könnte?

      Die Fehelermeldung lautet:
      ERROR 1064 (42000): 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 '%c.%y')'' at line 1

      Danke und Gruss Phil

      1. echo $begrüßung;

        Ja, das ist mir durchaus bewusst! Leider habe ich schon zuviele Daten in meiner Datenbank, wisst Ihr per Zufall wie der korrekte Befehl lauten könnte?

        Per Zufall? Du solltest dich beim Programmieren nicht auf den Zufall verlassen. :-)
        Du hast schlicht einen Syntax-Fehler, weil du Stringbegrenzer um Dinge gesetzt hast, die keine Strings sein sollen. Der einzige String, den du wirklich in deinem Statement hast, ist der mit der Formatierungsanweisung. Alles andere, das du derzeit noch als String notiert hast, sind Funktionen, die direkte Statement-Bestandteile sein wollen.

        Falls du doch noch interessiert bist, ein echtes Datumsfeld aus dem derzeitigen zu machen:

        • Füge eine weitere Spalte hinzu, der du den Typ DATE gibst.
        • UPDATE tabellenname SET neues_feld = STR_TO_DATE(altes_feld, '%e.%c.%y')
        • Vergleiche dann, stichprobenhaft oder vollständig, ob in das neue Feld die Werte korrekt übernommen wurden.
        • Lösche nun das alte Feld und gib den neuen Feld den alten Namen.
        • Ändere alle Bezüge auf dieses Feld, so dass sie nun mit dem neuen Typ umgehen können.

        Wenn du nun noch einen Hinweis brauchst, wie man Funktionen richtig aufruft, dann schau dir als Beispiel den zweiten Anstrich an.

        echo "$verabschiedung $name";

  2. echo $begrüßung;

    In meiner Tabelle habe ich in der Variable "varb" ein Datum abgespeichert. Das Format des Datums: "5.4.2007" (varchar(20))

    Aber dafür gibt es doch die Datums(- und Zeit)typen. MySQL kann damit viel besser rechnen als mit einem irgendwie formatierten String.

    Nur leider erscheint hierbei immer eine Fehlermeldung, was mache ich falsch?

    Es ist immer eine gute Idee, den Wortlaut der Fehlermeldung anzugeben. Nicht immer sind Fehler so offensichtlich, dass sie ein geübtes Auge sofort sieht.

    select count(*) from access where varb='DATE_FORMAT(curdate(), '%e.%c.%y')';

    Nach varb= kommt ein ', mit dem du eine Zeichenkette beginnst. Diese endet am nächsten '. Danach kommen Zeichen, die für MySQL keine gültige Option für das Fortsetzen des Statements sind. Du möchtest aber keine Zeichenkette notieren, sondern stattdessen die Funktion DATE_FORMAT aufrufen, mit den Argumenten curdate() (ebenfalls ein Funktionsaufruf) und dem Format-String.

    Und wenn du ein Datumsfeld verwendest, brauchst du dich um die Formatierungen an dieser Stelle gar nicht zu kümmern, sondern kannst einfach varb=curdate() verwenden.

    echo "$verabschiedung $name";