2 Stimmen

SELECT epoch timestamp größer als meine Variable

Warum ist das

SELECT strftime('%s', timestamp,'localtime') from locationLog WHERE strftime('%s', timestamp,'localtime') > 999999999999999999 ORDER BY _id DESC

alle Ausgaben zurückgeben, wenn alle meine Zeilen einen niedrigeren Wert in "timestamp" haben

in meinem Fall liefert die obige Abfrage

1334735588
1334735349
1334734317
1334734178
1334734172
and so on...

gibt er meine gesamte Tabelle zurück.

wenn ich umschalte > a < gibt er nichts zurück.

Ich denke, ich versuche, verschiedene Arten von Variablen zu vergleichen oder so etwas.

1voto

DaveRandom Punkte 85940

Vermutlich arbeiten Sie auf einer 32-Bit-Plattform, und die Tatsache, dass Sie eine Ganzzahl größer als 2147483647 verwendet haben, hat dazu geführt, dass Sie auf eine Variante des "Jahr 2038 Problem" .

Versuchen Sie es mit 2147483647 als die Zahl, mit der Sie in Ihrer Abfrage vergleichen.

Dies wird bis zum Jahr 2038 funktionieren. Bis dahin werden Sie Ihre Anwendung vermutlich auf einer 64-Bit-Plattform hosten (oder bis dahin vielleicht sogar auf einer 128- oder 256-Bit-Plattform!)

1voto

Sie vergleichen eine text Wert mit einer integer Wert, also wirft sqlite die integer Wert zu text und führt einen Zeichenfolgenvergleich durch:

sqlite> select strftime('%s', '2002-02-02', 'localtime');
1012611600
sqlite> select typeof(strftime('%s', '2002-02-02', 'localtime'));
text
sqlite> select typeof(999999999999999999);
integer
sqlite> select strftime('%s', '2002-02-02', 'localtime') > 999999999999999999;
1
sqlite> select cast(strftime('%s', '2002-02-02', 'localtime') as integer) > 999999999999999999;
0

Wie oben gezeigt, besteht die Lösung darin, den zurückgegebenen Wert von strftime zu einem numerischen Typ.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X