繁体   English   中英

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

[英]SQLite greater/less than operator giving false results

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

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

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

如果我用数字明确替换expireTime

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

我得到以下结果:

1400005363
1400005365
1400005368
1400005443

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM