我有以下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.这里发生了什么?
答案 0 :(得分:2)
strftime()
返回字符串,而不是整数。您需要使用CAST()
转换类型。
SELECT CAST(strftime('%s', `time`) AS integer)
FROM whois_online
WHERE CAST(strftime('%s', `time`) AS integer) > 1400005440;