Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Problem mit Filtern nach Zeit

Dieses Thema im Forum "Oracle" wurde erstellt von itsme87, 12 November 2013.

  1. itsme87

    itsme87 Neuer Benutzer

    Hallo zusammen,

    ich bin neu im Datenbank-Geschäft und habe gleich eine Frage:

    Code:
    select trackid, Start_TIME, STOP_TIME from MOBILETRACK.tracks where user_id = 1322796034 and Start_TIME between '7.12.11' and  '14.12.2011' order by Start_TIME 
    Damit lese ich alle Einträge aus der Tabelle Mobiletrack mit den gesetzten Bedingungen aus. Allerdings ist das letzte ausgelesene Datum der 13.12. und nicht der 14.12.
    Ich habe versucht das Datum mit "DateAdd" zu ändern, aber kein Erfolg. Wie würde das funktionieren?
    Einfach als Enddatum den nächsten Tag eingeben ist keine Option, da ich über eine Matlab-Gui die Daten downloade und der User die Daten von Hand eingibt. Natürlich wäre es möglich, das Datum in Matlab anzupassen aber da gibt es doch bestimmt eine einfachere Lösung mit einem direkten SQL-Befehl.

    Danke schonmal für eure Hilfe :)
     
  2. akretschmer

    akretschmer Datenbank-Guru


    vielleicht aus dem between ein Vergleich auf größer bzw. kleiner / gleich Endzeitpunkt machen. Du kannst auch in der Abrage selbst aus dem Enddatum ein Enddatum+1 machen, was genau hindert dich dran?


    In PG würde ich RANGE nehmen ...
     
  3. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT    trackid,
            Start_TIME,
            dateadd(day,1,STOP_TIME) AS Stop_TIME
    FROM    MOBILETRACK.tracks
    WHERE    user_id = 1322796034
    AND        Start_TIME BETWEEN '07.12.2011' AND '14.12.2011'
    ORDER BY Start_TIME
    Du solltest auf jedenfall darauf achten das deine Datumsangaben bei BETWEEN richtig von der DB interpretiert werden (vor allem Tag und Monat).
    Bei der Ausgabe kannst du problemlos einen Tag addieren, oder suchst du eine bestimmte Uhrzeit am selben Tag (z.B. 2011-12-14 00:00:00.000)?
     
  4. itsme87

    itsme87 Neuer Benutzer

    Danke schonmal.

    Ich suche keine bestimmte Uhrzeit, einfach alle Daten von Start- bis Enddatum.
    Wie kann ich denn einen Tag dazuzählen? Meint ihr so:
    Code:
    between '7.12.11' and  '14.12.11 +1'
    Da bekomme ich immer noch die gleichen Ergebnisse bis zum 13.12.

    Wie kann ich denn überprüfen wie die Datenbank das Datum interpretiert?
    Sollte aber stimmen. Wenn ich das Start-Datum ändere fangen die ausgewählten Daten am neuen Start-Datum an.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    irgendwie so:

    Code:
    test=*> select current_date + 1;
      ?column?
    ------------
    2013-11-13
    (1 row)
    
    test=*> select '2013-11-12'::date + '1day'::interval;
          ?column?
    ---------------------
    2013-11-13 00:00:00
    (1 row)
    
    Mag sein, daß die Syntax unter Oraggle anders ist.

    Idealerweise mit to_date() oder so arbeiten oder via CAST (wie oben) der DB sagen, daß es ein DATE ist. Aber vermutlich paßt das bei Dir.
     
  6. gurbelunder

    gurbelunder Datenbank-Guru

    Was akretschmar am Anfang meinte, wäre dies hier, sollte auch funktionieren. Sieht aber nicht ganz so schön aus:

    Code:
    SELECT trackid, Start_TIME, dateadd(day,1,STOP_TIME) AS Stop_TIME 
    FROM MOBILETRACK.tracks 
    WHERE user_id = 1322796034 AND Start_TIME >= '07.12.2011' AND Start_TIME <= '14.12.2011' 
    ORDER BY Start_TIME
    
     
    akretschmer gefällt das.
  7. itsme87

    itsme87 Neuer Benutzer

    Ich habs gerade probiert und folgende Meldung bekommen:
    "DATEADD": ungültiger Bezeichner
    Kann es sein dass Oracle diesen Befehl nicht unterstützt? Wobei er in der Hilfefunktion existiert. Da wird man auf diesen Link verwiesen
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Da keiner hier weiß, was du genau gemacht hast, wird es schwer, das zu beurteilen.
     
  9. gurbelunder

    gurbelunder Datenbank-Guru

    Okay, der DATEADD Fehler kam von mir, ich habe die Anweisung anders übernommen.

    Rein praktisch sollte es so ausreichen:

    Code:
    select trackid, Start_TIME, STOP_TIME 
    from MOBILETRACK.tracks 
    where user_id = 1322796034 and Start_TIME >= '7.12.11' and Start_TIME <=  '14.12.2011' order by Start_TIME
    
    Bezüglich DATEADD: den Fehler habe ich übernommen aus einem anderen Post. Solltest du hieran Interesse haben, dann schaue dir auch bitte die genaue Syntax dazu an.
     
  10. ukulele

    ukulele Datenbank-Guru

    dateadd() hab ich jetzt in MSSQL verwendet, sollte aber sehr ähnlich auch unter Oracle laufen. Funktionsnamen unterscheiden sich bei SQL sehr häufig aber tun meist das selbe.

    Dein Problem, alle Datensätze wo Wert x innerhalb eines Zeitraums liegt, ist mit BETWEEN zu lösen.
    Code:
    DECLARE    @Start_TIME DATETIME
    
    SET        @Start_TIME = '2011-14-12 00:00:00.000'
    
    IF        @Start_TIME BETWEEN '7.12.11' AND '14.12.2011'
    BEGIN
        SELECT    1
    END
    ELSE
    BEGIN
        SELECT    2
    END
    -- Ergebnis 1
     
  11. itsme87

    itsme87 Neuer Benutzer

    Danke für eure Hilfe,
    ich habe es nach einigen Versuchen trotzdem nicht hinbekommen und es jetzt mit ein paar if-Abfragen in Matlab umgesetzt bevor ich noch mehr Zeit verliere.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden