Abfrage SQL YYYY-MM-DD nach Monat filtern - wie?

Registrierer

Erfahrenes Mitglied
ich habe folgendes Problem, ich habe in meiner mysql Datenbank Spalte Datum mit dem folgenden Format YYYY-MM-DD.

Ich möchte gerne die Abfrage so gestalten, dass ich zum Beispiel nur Datensätze von Februar (02) ausgeben kann usw. gibt es eine Möglichkeit bei der Abfrage aus der Datenbank das zu begrenzen****?

Danke schon mal im Voraus.
Gruß
Helmut
 

brunlorenz

*C* & Windows-Freak
Abfrage Begrenzen:
Code:
LIMIT 0,5
Liefert die ersten 5 Einträge (von 0-5)
Das Andere musst du mit PHP bewerkstelligen, oder eine Spalte für den Monat einrichten.
 

Strafi

Erfahrenes Mitglied
Wenn dein Datumsfeld in der Datenbank ein richtiges ist, dann kannste das mit between() machen. Willst du es mit PHP machen, dann nimm explode().
 

just-click

Erfahrenes Mitglied
Bin mir nicht zu 200% sicher obs stimmt, aber viel einfacher als mit between und explode ist folgendes:
PHP:
"SELECT
*
FROM
tabelle
WHERE
DATE_FORMAT(datum, '%m') = 02";

Grad fix getestet, funktioniert, aber halt nur wenn du das Feld auch als 'datetime' kennzeichnest.
 

Strafi

Erfahrenes Mitglied
Stimmt für diese eine Abfrage ist das richtig. Möchte ich vielleicht später noch Suchanfragen machen, oder andere Kombinationen aufrufen. Ist between() doch genau richtig und nicht komplizierter als das DATE_FORMAT?

Und wenn ich mich nicht irre, geht between auch ohne das ein Feld als 'datetime' deklariert ist.
 

just-click

Erfahrenes Mitglied
Was meinst du mit anderer Suchanfrage? Wenn man es mal nach Tagen/Jahren suchen will, nimmt man eben statt %m, %y oder was auch immer.
Wenn man einen anderen Monat als Februar will, dann kann man das ja Variabel gestalten.
Und wenn man jetzt noch alles aus einem Jahr haben möchte, dann erweitert man einfach den Query
PHP:
"SELECT
// [...]
DATE_FORMAT(datum, '%Y.%m') = '"$Y.'"."'.$monat."'";
Gerade wenns ums Datum geht sollte DATE_FORMAT reichen und das mit der datetime Deklarierung war von mir nur eine Faulheitsaussage, es geht natürlich überall wenn man eben das Feld richtig gekennzeichnet hat.
 

Registrierer

Erfahrenes Mitglied
Ich mache es jetzt mit
WHERE DATUM ='%-02-%,
natürlich ist die 02 eine Variable und das Jahr und den Monat ersetze ich ebenfalls durch Variablen, so ist man sehr flexibel.

Und ja, das Feld ist "date".

Vielen Dank für die Antworten