繁体   English   中英

如何在SQLITE3中查询最近的行

[英]How to Query for Recent Rows in SQLITE3

我正在使用SQLite3并尝试查询最近的行。 所以我让SQLite3用strftime('%s','now')在每行中插入一个unix时间戳。 我的桌子看起来像这样:

CREATE TABLE test(id INTEGER PRIMARY KEY, time);

INSERT INTO test (time) VALUES (strftime('%s','now')); --Repeated


SELECT * FROM test;
1|1516816522
2|1516816634
3|1516816646 --etc lots of rows

现在,我只想查询最近的条目,例如,我试图获取最近一小时内有时间的所有行。 我正在尝试以下SQL查询:

SELECT * FROM test WHERE time > strftime('%s','now')-60*60;

但是,无论time列中的值如何,总是返回所有行。 我真的不知道发生了什么。

另外,如果我输入WHERE time > strftime('%s','now')它将不返回任何内容(这是预期的),但是如果我输入WHERE time > strftime('%s','now')-1则它会返回所有内容。 我不知道为什么

这是另一个示例:

sqlite> SELECT , strftime('%s','now')-1 AS window FROM test WHERE time > window;
1|1516816522|1516817482
2|1516816634|1516817482
3|1516816646|1516817482

似乎SQLite3认为中间列中的值大于右列中的值!

这根本不是我所期望的。 有人可以告诉我发生了什么吗? 谢谢!

strftime()的目的是格式化值,因此它返回一个字符串。

当您尝试使用其返回值进行计算时,数据库必须将其转换为数字。 数字和字符串不能直接相互比较。

您必须确保比较中的两个值具有相同的数据类型。 最好的方法是将数字存储在表中:

INSERT INTO test (time)
VALUES (CAST(strftime('%s','now') AS MAKE_THIS_A_NUMBER_PLEASE));

(或者只是将列类型声明为具有数字亲和力的东西。)

暂无
暂无

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

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