为什么会这样
SELECT strftime('%s', timestamp,'localtime') from locationLog WHERE strftime('%s', timestamp,'localtime') > 999999999999999999 ORDER BY _id DESC
当我的所有行在“timestamp”中的值较低时,返回任何输出
在我的情况下,上面的查询返回
1334735588
1334735349
1334734317
1334734178
1334734172
and so on...
它返回我的整个表格。
如果我将>
切换为<
,则不返回任何内容。
我想我正在尝试比较不同类型的变量或类似的东西。
答案 0 :(得分:1)
猜测,您使用的是32位平台,并且使用了大于2147483647的整数这一事实导致您点击"Year 2038 Problem"上的变体。
尝试使用2147483647
作为您在查询中比较的数字。
这将继续工作到2038年,届时您可能会在64位平台上托管您的应用程序(或者甚至可能是128位或256位!)
答案 1 :(得分: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
转换为某种数字类型。