与strftime()的数字比较不一致

时间:2017-08-23 20:55:20

标签: sqlite

我想从firefox数据库places.sqlite中选择今天访问过的网址。 作为第一次尝试,我用来完成此操作的查询是(请参阅运算符>):

SELECT datetime(moz_places.last_visit_date/1000000,'unixepoch'), moz_places.title
FROM moz_places
WHERE moz_places.last_visit_date/1000000>strftime('%s','now','start of day')
ORDER BY moz_places.last_visit_date DESC;

这个问题的答案是什么。

然后我将查询更改为此,这几乎相同(请参阅运算符->):

SELECT datetime(moz_places.last_visit_date/1000000,'unixepoch'), moz_places.title
FROM moz_places
WHERE moz_places.last_visit_date/1000000-strftime('%s','now','start of day')>0
ORDER BY moz_places.last_visit_date DESC;

然后答案是正确的。

有没有人知道为什么>在一个查询中起作用而在另一个查询中不起作用?

1 个答案:

答案 0 :(得分:0)

strftime()函数始终返回一个字符串,字符串总是比一个数字大。

当您尝试使用带加法/减法的字符串时,它会自动转换为数字,因此last_visit_date-strftime(...)的结果是一个数字。

您可以将原始查询中的函数调用更改为:

CAST(strftime('%s', ...) AS NUMBER)

或者,不太明显,如果你想保存输入:

strftime('%s', ...)+0