Ankündigung

Einklappen
Keine Ankündigung bisher.

Nur Datensätze zischen Zeit1 und Zeit2 ausgeben

Einklappen

Neue Werbung 2019

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

  • Nur Datensätze zischen Zeit1 und Zeit2 ausgeben

    Hallo, ich suche nach einer Möglichkeit alle Datensätze auszugeben bei denen eine Datumsfeld zwischen now()-86400 und now() ist.
    Wie muss ich da rangehen?

    Ich hab da was in MySQL mit SELECT * FROM tabelle WHERE Datumsfeld BETWEEN now()-86400 AND now() gegooglet, aber das ergibt kein richtiges Ergebnis.

    Könnt Ihr mir einen Tipp geben?
    Besten Dank für Hilfe
    Christian

  • #2
    https://dev.mysql.com/doc/refman/5.5...functions.html

    Kommentar


    • #3
      BETWEEN ist schon richtig, falls die Datentypen stimmen.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Ja, das hab ich schon angeschaut aber finde keine Lösung für mich.

        Kommentar


        • #5
          now() ergibt einen Zeitwert. Davon ziehst Du 86400 ab. 86400 Pfannkuchen oder Bockwürste?
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Zitat von akretschmer Beitrag anzeigen
            BETWEEN ist schon richtig, falls die Datentypen stimmen.
            JA, alles ist UNIX_TIMESTAMP

            SELECT * FROM geburtstage WHERE UNIX_TIMESTAMP(sendezeit) BETWEEN UNIX_TIMESTAMP(now()-86400) AND UNIX_TIMESTAMP(now())
            Das gibt aber nicht das richtige Ergebnis

            Kommentar


            • #7
              NOW() ist kein Unix-Timestamp. Also macht es keinen Sinn davon 86400 Zwetschkenknödel oder was auch immer abzuziehen. Denn der Datenbank teilst du ja nicht mit, dass du 86400 Sekunden abziehen möchtest. Davon abgesehen, warum überhaupt Sekunden und nicht gleich 1 Tag abziehen?

              Code:
              mysql> SELECT NOW(), NOW() - INTERVAL 1 DAY;
              +---------------------+------------------------+
              | NOW()               | NOW() - INTERVAL 1 DAY |
              +---------------------+------------------------+
              | 2018-02-18 20:57:57 | 2018-02-17 20:57:57    |
              +---------------------+------------------------+
              1 row in set (0.00 sec)

              Kommentar


              • #8
                Code:
                test=*# select now();
                              now              
                -------------------------------
                 2018-02-18 14:28:37.118403+01
                (1 Zeile)
                
                test=*# select now() - 86400;
                ERROR:  operator does not exist: timestamp with time zone - integer
                ZEILE 1: select now() - 86400;
                                      ^
                TIP:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
                test=*#
                Zeiten so zu speichern als Sekunden seit EPOCH ist ein immer wieder gern gemachter Weg, sich das Leben unnötig zu verkomplizieren.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Zitat von akretschmer Beitrag anzeigen
                  Code:
                  test=*# select now();
                  now
                  -------------------------------
                  2018-02-18 14:28:37.118403+01
                  (1 Zeile)
                  
                  test=*# select now() - 86400;
                  ERROR: operator does not exist: timestamp with time zone - integer
                  ZEILE 1: select now() - 86400;
                  ^
                  TIP: No operator matches the given name and argument type(s). You might need to add explicit type casts.
                  test=*#
                  Zeiten so zu speichern als Sekunden seit EPOCH ist ein immer wieder gern gemachter Weg, sich das Leben unnötig zu verkomplizieren.
                  OK das war mein Fehler mit dem abziehen. Aber das mit den Between funktioniert nicht.
                  SELECT * FROM geburtstage WHERE sendezeit BETWEEN NOW() - INTERVAL 1 DAY AND NOW();

                  Ein vorhandener Datensatz mit sendezeit = 2018-02-18 12:00:00 sollte eigentlich angezeigt werden. Is aber nicht

                  Kommentar


                  • #10
                    Bitte Tabellenstruktur und Testdaten als SQL-Code posten.

                    Kommentar


                    • #11
                      Danke für die Denkhilfen
                      Christian

                      Kommentar


                      • #12
                        Genau die letzten 24 Stunden wird eher selten gewünscht. Der Mensch denkt in Tagen.
                        Häufiger wird wohl der gesamte gestrige Tag und der heutige bis zur aktuellen Zeit gewünscht. Die Bedingung dafür (MySQL) :
                        Code:
                         
                         WHERE datum BETWEEN CURDATE() - INTERVAL 1 DAY AND NOW()

                        Kommentar

                        Lädt...
                        X