Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL Abfrage .. Date mit Daterange

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] SQL Abfrage .. Date mit Daterange

    hallo,

    ich habe eine MySQL Tabelle, die hat folgende spalten

    id, date
    1,2010-03-01
    2,2010-03-01
    3,2010-03-01
    4,2010-03-03

    ich versuche mit folgende SQL Abfrage alle Daten die zwischen 01-04-2010 und 03-04-2010 zu selectieren!
    es passt alles soweit.

    select count(*) from table where date between '2010-04-01' and '2010-04-03'
    aber ich bekomme die 0 als ergebnis wenn ich date so schreibe:
    between '2010-04-01' and '2010-04-01'

    mein Problem ich möchte nur einen Tag auswählen.
    Ich möchte aber immer ein Daterage angeben, da diese Abfrage Teil ein PHP Script ist.
    hat jemand eine Idee?

    Danke im Voraus.

    Sam


  • #2
    Funktioniert folgendes...?

    PHP-Code:
    $sDatumVon '2010-04-01';
    $sDatumBis '2010-04-02';
    $sQuery "SELECT COUNT(*) FROM tabelle WHERE datum BETWEEN '$DatumVon' AND '$DatumBis' "
    Grüße
    Thomas

    Kommentar


    • #3
      Zitat von thomas_w Beitrag anzeigen
      Funktioniert folgendes...?

      PHP-Code:
      $sDatumVon '2010-04-01';
      $sDatumBis '2010-04-02';
      $sQuery "SELECT COUNT(*) FROM tabelle WHERE datum BETWEEN '$DatumVon' AND '$DatumBis' "
      Grüße
      Thomas
      ja das funktioniert, aber wenn der user folgendes angibt:

      PHP-Code:
      $sDatumVon '2010-04-01';
      $sDatumBis '2010-04-01';
      $sQuery "SELECT COUNT(*) FROM tabelle WHERE datum BETWEEN '$DatumVon' AND '$DatumBis' "
      also er soll die Ergebnisse bekommen nur von den jeweiligen Tag.
      in MSSQL geht das ganz leicht

      select count(*) from table where datediff(dd,date,'2010-jan-01')<=0 and datediff(dd,date,'2010-jan-01')>=0

      so muss auch in mysql gehen oder?

      Danke!
      Sam

      Kommentar


      • #4
        Überprüf in php doch ob start und enddatum gleich sind und pass daraufhin die where klausel an.

        Kommentar


        • #5
          Zitat von samij Beitrag anzeigen
          select count(*) from table where datediff(dd,date,'2010-jan-01')<=0 and datediff(dd,date,'2010-jan-01')>=0

          so muss auch in mysql gehen oder?
          Wenn du wissen willst, ob es eine Funktion wie datediff unter MySQL auch gibt - dann schau bitte ins Handbuch!


          Zitat von samij Beitrag anzeigen
          aber ich bekomme die 0 als ergebnis wenn ich date so schreibe:
          between '2010-04-01' and '2010-04-01'
          Das könnte vielleicht daran liegen, dass keines deiner im Beispiel angegebenen Daten überhaupt im April 2010 liegt ...?

          Code:
          SELECT '2010-04-01' BETWEEN '2010-04-01' AND '2010-04-01'
          gibt wie erwartet 1 zurück.

          Dein vermeintliches Problem ist also m.E. schlicht und einfach unexistent.

          Kommentar


          • #6
            Zitat von ChrisB Beitrag anzeigen
            Wenn du wissen willst, ob es eine Funktion wie datediff unter MySQL auch gibt - dann schau bitte ins Handbuch!



            Das könnte vielleicht daran liegen, dass keines deiner im Beispiel angegebenen Daten überhaupt im April 2010 liegt ...?

            Code:
            SELECT '2010-04-01' BETWEEN '2010-04-01' AND '2010-04-01'
            gibt wie erwartet 1 zurück.

            Dein vermeintliches Problem ist also m.E. schlicht und einfach unexistent.
            ich gebe zu mein Beispiel war falsch aber mein Problem existiert schön!
            Ich habe die in PHP gelöst, aber ich sucher nach eine MYSQL Lösung.

            Kommentar


            • #7
              Wie schon ChrisB gesagt hat, MySQL führt den Befehl korrekt aus, der Fehler muss woanderst sein.

              Code:
              CREATE TABLE test_daten (
               datum DATE NOT NULL
              );
              
              INSERT INTO test_daten VALUES
              ( '2010-03-31'), ('2010-04-01'), ('2010-04-02');
              
              
              mysql> SELECT COUNT(*) FROM test_daten
                  -> WHERE datum BETWEEN '2010-04-01' AND '2010-04-01';
              +----------+
              | COUNT(*) |
              +----------+
              |        1 |
              +----------+
              1 row in set (0.02 sec)
              EDIT:
              Der Grund liegt wahrscheinlich darin, dass die Spalte nicht vom Typ DATE sondern TIMESTAMP ist.




              Grüße
              Thomas

              Kommentar


              • #8
                Zitat von thomas_w Beitrag anzeigen
                Wie schon ChrisB gesagt hat, MySQL führt den Befehl korrekt aus, der Fehler muss woanderst sein.

                Code:
                CREATE TABLE test_daten (
                 datum DATE NOT NULL
                );
                
                INSERT INTO test_daten VALUES
                ( '2010-03-31'), ('2010-04-01'), ('2010-04-02');
                
                
                mysql> SELECT COUNT(*) FROM test_daten
                    -> WHERE datum BETWEEN '2010-04-01' AND '2010-04-01';
                +----------+
                | COUNT(*) |
                +----------+
                |        1 |
                +----------+
                1 row in set (0.02 sec)
                EDIT:
                Der Grund liegt wahrscheinlich darin, dass die Spalte nicht vom Typ DATE sondern TIMESTAMP ist.




                Grüße
                Thomas
                daran liegt es.

                vielen herzlichen Dank.

                Viele Grüße, Sami

                Kommentar

                Lädt...
                X