SELECT epoch timestamp比我的变量大

时间:2012-04-30 10:06:54

标签: php sql sqlite

为什么会这样

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...

它返回我的整个表格。

如果我将>切换为<,则不返回任何内容。

我想我正在尝试比较不同类型的变量或类似的东西。

2 个答案:

答案 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转换为某种数字类型。