【问题标题】:SQLite greater/less than operator giving false resultsSQLite 大于/小于运算符给出错误结果
【发布时间】:2014-05-13 18:43:58
【问题描述】:

我有以下 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。这是怎么回事?

【问题讨论】:

    标签: php sql sqlite logic


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-18
      • 2019-10-24
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多