Sebastian: Datensatz filtern: Fehler in SQL-Befehl?

Hallo,

auf einer PHP-Seite möchte ich mir nur bestimmte Datensätze anzeigen lassen. Und zwar sind in einer MySQL-DB die Felder "vom" und "bis" angelegt. Nun möchte ich nur die Datensätze anzeigen lassen, deren Zeitraum (vom - bis) unter das aktuelle Datum fällt.

Beispiel:
vom: 01.06.03
bis: 30.06.03
= Dieser datensatz sollte zum Beispiel angezeigt werden

dagegen sollte

vom: 15.06.03
bis: 17.06.03
= nicht angezeigt werden.

Wie lautet der SQL-Befehl hierfür. Mit diesem Befehl komme ich nicht weit weil er irgendwo einen Fehler enthält:

"SELECT * FROM tblTest WHERE vom AND bis BETWEEN date";

Außerdem weiss ich nicht, ob man in den SQl-Befehl einfach date einfügen kann und damit dann das aktuelle Datum gemeint ist.

Wäre super nett wenn mir jemand helfen könnte !

Danke

Freundliche Grüße
Sebastian

  1. Hi,

    Wie lautet der SQL-Befehl hierfür. Mit diesem Befehl komme ich nicht weit weil er irgendwo einen Fehler enthält:

    "SELECT * FROM tblTest WHERE vom AND bis BETWEEN date";

    now() sollte das aktuelle Datum beinhalten
    ansonsten siehe http://www.mysql.com

    Du hast einfach einen Dreher im Statement, es sollte heissen
    ...WHERE now() BETWEEN vom AND bis

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. Hi,

      in welchem Format wird das NOW() den behandelt. Die werte in den Spalten vom und bis werden im Format tt.mm.yy eingegeben.

      Geht das dann überhaupt ?

      Grüße
      Sebastian

      1. Moin!

        in welchem Format wird das NOW() den behandelt. Die werte in den Spalten vom und bis werden im Format tt.mm.yy eingegeben.

        Hast du diesen Spalten den Typ "Text" oder den Typ "Date" zugewiesen. Nimm DATE, damit hast du mehr Freude, weil MySQL dann z.B. die Spalten nicht alphabetisch sortiert, sondern nach Datum. Für die Ausgabe kannst du das Datum mit den MySQL-Datumsfunktionen in jedes beliebige Format bringen.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hi,

          ich hatte die Spalten vorher als TEXT und jetzt als DATE. Wie geht das genau mit dem beliebigen Format ? Hast Du Links wo man mehr Infos finden kann oder sogar ein kl. Beispiel ?

          MFG
          Sebastian

          1. Moin!

            ich hatte die Spalten vorher als TEXT und jetzt als DATE. Wie geht das genau mit dem beliebigen Format ? Hast Du Links wo man mehr Infos finden kann oder sogar ein kl. Beispiel ?

            Die MySQL-Doku hilft. http://www.mysql.com. Dort Durchklicken zur deutschen Seite, zur Dokumentation, und irgendwo im Bereich des Kapitels 6 sind dann auch die Datumsfunktionen gelistet.

            Oder du wirfst eben die Suchmaschine deines Vertrauens an.

            - Sven Rautenberg

            --
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
            1. Hi,

              erstmal danke für die Hilfe. Habe mal gesucht und bin auf die Funktion convert gestoßen: z.B. CONVERT(varchar(5), GetDate(), 108)
              von der Seite http://www.itrain.de/knowhow/sql/tsql/datum/datumconvert.asp

              Nur wie und wo baue ich diese Funktion in meinen SQL-Befehl ein ???

              Danke !

              MFG
              Sebastian

              1. Moin!

                erstmal danke für die Hilfe. Habe mal gesucht und bin auf die Funktion convert gestoßen: z.B. CONVERT(varchar(5), GetDate(), 108)
                von der Seite http://www.itrain.de/knowhow/sql/tsql/datum/datumconvert.asp

                Wenn du MySQL benutzt, solltest du niemals in Dokumentationen zu anderen SQL-Servern stöbern. In diesem Falle eben nicht in Dokus zu Microsoft SQL Server. Da kommt nur Blödsinn bei heraus.

                Ich dachte eher an MySQLs Kapitel 7.3.4: http://www.mysql.com/doc/de/Date_and_time_functions.html. Da gibts wunderbare Funktionen, und Beispiele für den Einsatz gibts auch.

                Nur wie und wo baue ich diese Funktion in meinen SQL-Befehl ein ???

                Da, wo du das Ergebnis der Funktion benötigst. Wenn du aus dem DATE-Feld ein deutsches Datum machen und an PHP geliefert kriegen willst, beispielsweise direkt zu Beginn hinter SELECT. Vergiß nicht, einen Spaltenalias mit anzugeben, sonst wird der Spaltenname ziemlich unhandlich in PHP.

                SELECT DATE_FORMAT(datumsspalte,"%d.%m.%Y") AS datum FROM spalte

                Experimentiere mit PHPMyAdmin, um die Wirkungsweise deiner SQL-Statements schnell zu erforschen. Die neueren Versionen haben wohl sogar einen Code-Generator drin, so dass du nahezu keinen Aufwand mehr hast, per Copy&Paste das in dein PHP-Skript zu packen.

                - Sven Rautenberg

                --
                ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                1. Hi,

                  danke für die super Hilfe !

                  Ich werde es mal testen und ggf. bei Problemen hier nochmal posten !

                  DANKE !

                  Sebastian

                2. Hi,

                  also ehrlich gesagt blicke ich da nicht wirklich durch.

                  Kannst du mir nicht bei dem SQL-Befehl helfen ?

                  Bisher habe ich:

                  SELECT * FROM daten WHERE NOW() BETWEEN von AND bis

                  Wie heisst denn die Syntax mit der konvertierung. Sorry, für die Newbie-Frage, aber ich bekomme es echt nicht hin...

                  Danke!

                  Gruß
                  Sebastian

                  1. Moin!

                    Bisher habe ich:

                    SELECT * FROM daten WHERE NOW() BETWEEN von AND bis

                    Lies dieses Posting nochmal, insbesondere das SELECT: [pref:t=51018&m=280134]

                    SELECT * ist schlecht, ganz schlecht. Hilft dir hier außerdem ja auch nicht weiter. Gib immer die Spalten an, die du von der Datenbank wissen willst.

                    - Sven Rautenberg

                    --
                    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                    1. Hi,

                      so doch auch nicht, oder:

                      SELECT ID, Vorname, Nachname, Grund, vom, bis
                      FROM daten WHERE DATE_FORMAT('NOW(), '%d%m%y'); BETWEEN vom AND bis

                      1. Moin!

                        so doch auch nicht, oder:

                        Ich wiederhole mich ja nur ungern, aber:
                        "Lies dieses Posting nochmal, insbesondere das SELECT: [pref:t=51018&m=280134]"

                        SELECT ID, Vorname, Nachname, Grund, vom, bis
                        FROM daten WHERE DATE_FORMAT('NOW(), '%d%m%y'); BETWEEN vom AND bis

                        Aber ich bin gerne noch etwas ausführlicher, wo ich sehe, dass du dich so sonnlos abmühst.

                        Schritt 1: Definiere alle Spalten deiner Tabelle, die ein Datum enthalten, als DATE-Datentyp. Hierbei kann es dir passieren, dass du sämtliche Daten, die in diesen Spalten stehen, nochmal neu eingeben mußt. Das ist dann Pech - hättest du vermeiden können, indem du gleich den richtigen Datentyp benutzt hättest.

                        Schritt 2: Wenn du den Typ umgestellt hast, dann kannst du in WHERE-Bedingungen ganz simpel Datumsfelder miteinander vergleichen. Du mußt _dort_ _keine_ Umwandlung in irgendein Darstellungsformat wählen. Die Funktion NOW() beispielsweise liefert immer ein zur Vergleichsspalte passendes Datum zurück, welches direkt in den Vergleich (hier: datum BETWEEN datum1 AND datum2) einfließen kann.

                        Schritt 3: Da du wahrscheinlich irgendwie auf die Spalten mit den Daten zugreifen willst, um die auszugeben, brauchst du _dann_ die DATE_FORMAT()-Funktion.

                        Siehe dazu auch nochmal aus dem zitierten Posting:

                        SELECT DATE_FORMAT(datumspalte,"%d.%m.%Y") as datum FROM tabelle

                        Ergänzt:
                        SELECT DATE_FORMAT(bis,"%d.%m.%Y") as enddatum FROM tabelle WHERE NOW() BETWEEN vom AND bis

                        - Sven Rautenberg

                        --
                        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                3. Hi,

                  das klappt auch nicht:

                  SELECT * FROM daten WHERE DATE_FORMAT('NOW(), '%d%m%y'); BETWEEN vom AND bis

    2. Hi,

      Also, wenn ich einen neuen DS anlege und das Format tt.mm.yyyy benutze geht es nicht. Wenn ich allerdings das Format yyyy-mm-tt benutze geht es.

      Also auf der einen Seite sollte man das Datum schon im format tt.mm.yyyy eingeben aber wie kann man dann das Datum im Format yyyy-mm-tt in der DB abspeichern ???

      Grüße
      Sebastian

      1. hi,

        Also auf der einen Seite sollte man das Datum schon im format tt.mm.yyyy eingeben aber wie kann man dann das Datum im Format yyyy-mm-tt in der DB abspeichern ???

        tja, wie könnte man wohl in einem string punkte durch striche ersetzen ... hat vielleicht die übersicht über die string-funktionen in der php-doku dazu was anzubieten ...?
        (JA, hat sie.)

        gruss,
        wahsaga