2

どうしてこれなの

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

すべての行の「タイムスタンプ」の値が低い場合、出力を返します

私の場合、上記のクエリが返されます

1334735588
1334735349
1334734317
1334734178
1334734172
and so on...

テーブル全体を返します。

私がそれに切り替える><、何も返されません。

さまざまなタイプの変数などを比較しようとしていると思います。

4

2 に答える 2

1

text値を値と比較しているintegerので、sqliteはinteger値をtextにキャストし、文字列比較を行います。

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

上に示したように、解決策はの戻り値strftimeをある数値型にキャストすることです。

于 2012-04-30T13:53:07.273 に答える
1

推測では、あなたは 32 ビット プラットフォームを使用しており、2147483647 より大きい整数を使用したという事実により、「2038 年問題」のバリエーションに遭遇しました。

2147483647クエリで比較する数値として使用してみてください。

これは 2038 年まで機能し続けますが、それまでにアプリケーションを 64 ビット プラットフォームでホストすることになるでしょう (それまでには 128 ビットまたは 256 ビットでさえあるかもしれません!)。

于 2012-04-30T10:38:26.680 に答える