SQLite - Einträge, die älter sind als...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SQLite - Einträge, die älter sind als...

    Ich versuche über folgenden Code Datensätze zu ermitteln, die älter als zwei tage sind.

    SQL-Abfrage

    1. SELECT * FROM test WHERE timestamp < date('now', '-2 days')

    Leider erhalte ich auch Datensätze mit einem timestamp von heute zurück. Das Feld 'timestamp' ist als DECIMAL typ definiert.

    Was muss ich tun damit diese Überprüfung läuft?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • macmoonshine schrieb:

    Ungefähr so:

    SQL-Abfrage

    1. SELECT * FROM test WHERE datetime(timestamp, 'unixepoch') < date('now', '-2 days')
    Unter Umständen musst du aber noch die Zeitzone anpassen.
    Aktuell erhalte ich mit fogender Abfrage alle Ergebnisse ind er Liste, auch elche von heute. ich vermute aber das liegt daran, dass der DB Zeitstempel anhand des folgenden referenzDatums erstellt wird.


    Quellcode

    1. + (id)referenceDate1800 {
    2. NSString *referenceDateString = @"01.01.1800 00:00:00 +0000";
    3. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    4. [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    5. [dateFormatter setDateFormat:@"dd.MM.yyyy hh:mm:ss ZZZ"];
    6. return [dateFormatter dateFromString:referenceDateString];
    7. }
    Hast du eine Idee, wie ich die Überprüfung auf Basis des referenzdatums machen kann`?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • macmoonshine schrieb:

    SQLite ist sehr mager, was Funktionen angeht. Ich würde Datumswerte immer als Datum speichern und nicht als Zeichenketten.
    Es sind alle Datumswerte als timestamp in einem DECIMAL Feld gespeichert. Allerdings verwendet die gesamte Firma, somit hin auch unsere Apps den 01.01.1800 als Referenzedatum für die TimeStamp Berechnung. Diesen kann ich bei der SQL methode aber nicht mit angeben, wie es scheint.

    Habe es nun mit iOS Boardmitteln gelöst. :)
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • DanielBocksteger95 schrieb:

    macmoonshine schrieb:

    SQLite ist sehr mager, was Funktionen angeht. Ich würde Datumswerte immer als Datum speichern und nicht als Zeichenketten.
    Es sind alle Datumswerte als timestamp in einem DECIMAL Feld gespeichert. Allerdings verwendet die gesamte Firma, somit hin auch unsere Apps den 01.01.1800 als Referenzedatum für die TimeStamp Berechnung. Diesen kann ich bei der SQL methode aber nicht mit angeben, wie es scheint.
    Habe es nun mit iOS Boardmitteln gelöst. :)
    Bei SQLite gibt es weder DECIMAL noch TIMESTAMP also keine ahnung von was du redest.

    ich denke mal du hast eine column in der du INTEGER oder REAL werte speicherst. welche werte (wertebereiche etc) du da gespeichert hast, solltest du wohl selbst wissen!?
  • gritsch schrieb:

    DanielBocksteger95 schrieb:

    macmoonshine schrieb:

    SQLite ist sehr mager, was Funktionen angeht. Ich würde Datumswerte immer als Datum speichern und nicht als Zeichenketten.
    Es sind alle Datumswerte als timestamp in einem DECIMAL Feld gespeichert. Allerdings verwendet die gesamte Firma, somit hin auch unsere Apps den 01.01.1800 als Referenzedatum für die TimeStamp Berechnung. Diesen kann ich bei der SQL methode aber nicht mit angeben, wie es scheint.Habe es nun mit iOS Boardmitteln gelöst. :)
    Bei SQLite gibt es weder DECIMAL noch TIMESTAMP also keine ahnung von was du redest.
    ich denke mal du hast eine column in der du INTEGER oder REAL werte speicherst. welche werte (wertebereiche etc) du da gespeichert hast, solltest du wohl selbst wissen!?
    Ich meine sehr wohl DECIMAL (sqlite.org/datatype3.html) siehe Tabelle im Anhang... Wieso genau der vorherige Programmierer diesen gewählt hat, kann ich dir aber genau so wenig sagen.

    Selbstverständlich weiß ich was da rein gereicht wird. Ein Zeitstempel mit dem 01.01.1800 als 'tag 1' in form einer Fließkommazahl. Ich kann nur wiederholen, dass SQLite diesen Wert aber nicht für die Berechnung nutzen kann, da dort die Daten nicht mit einem spezifischen Tag 1 gesetzt werden können.

    Bildschirmfoto 2015-10-28 um 16.17.03.png
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • also hier aus der doku:

    Each column in an SQLite 3 database is assigned one of the following type affinities:
    • TEXT
    • NUMERIC
    • INTEGER
    • REAL
    • BLOB


    jetzt zum problem.

    zwischen 1.1.180 und dem 1.1.1970 ist eine genau definierte anzahl an sekunden. such die dir mal raus, addiere bzw sobtrahiere sie und schon kannst du mit den daten rechnen welche als basis den 1.1.1970 verwenden.
  • DanielBocksteger95 schrieb:

    gritsch schrieb:

    Bei SQLite gibt es weder DECIMAL noch TIMESTAMP also keine ahnung von was du redest.
    […]
    Ich meine sehr wohl DECIMAL (sqlite.org/datatype3.html) siehe Tabelle im Anhang..
    Damit beweist Du lediglich, dass es wirklich kein DECIMAL gibt und Du mit NUMERIC arbeitest… :P
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Marco Feltmann schrieb:

    DanielBocksteger95 schrieb:

    gritsch schrieb:

    Bei SQLite gibt es weder DECIMAL noch TIMESTAMP also keine ahnung von was du redest.
    […]
    Ich meine sehr wohl DECIMAL (sqlite.org/datatype3.html) siehe Tabelle im Anhang..
    Damit beweist Du lediglich, dass es wirklich kein DECIMAL gibt und Du mit NUMERIC arbeitest… :P
    genau, und numeric hat den nachteil dass da die daten mehrfach in die hand genommen, analysiert und dann als INTEGER/REAL oder eben als text gespeichert werden.