SQLite大于/小于运算符给出错误结果

时间:2014-05-13 18:43:59

标签: php sql sqlite logic

我有以下SQLite查询。它旨在删除过去三秒内未更新时间的所有条目。

$expireTime = time() - 3;
$dbh->query("DELETE FROM `whois_online` WHERE (strftime('%s', `time`) > $expireTime)");

此查询不会返回表中的任何条目,即使它应该。但是,将>更改为<会导致显示出来,即使它所比较的​​数字不应该让这种情况发生。

如果我用数字明确替换expireTime

sqlite> SELECT strftime('%s', `time`) from whois_online WHERE (strftime('%s', `time`) > 1400005440);

我得到以下结果:

1400005363
1400005365
1400005368
1400005443

这显然不是逻辑上正确的,因为所有这些数字都小于1400005440.这里发生了什么?

1 个答案:

答案 0 :(得分:2)

strftime()返回字符串,而不是整数。您需要使用CAST()转换类型。

SELECT CAST(strftime('%s', `time`) AS integer)
FROM whois_online
WHERE CAST(strftime('%s', `time`) AS integer) > 1400005440;