如何解决按unix时间戳选择数据
以下是我创建的表及其记录:
CREATE TABLE students (
id INTEGER PRIMARY KEY,name TEXT NOT NULL,gender TEXT NOT NULL,created_at datetime
);
INSERT INTO students VALUES (1,'Ryan','M','2012-11-03 00:00:00');
INSERT INTO students VALUES (2,'Joanna','F','2013-11-03 00:00:00');
为了按时间获取记录,我使用以下 SQL 语句:
SELECT * FROM students WHERE created_at > 1620489600000;
并且可以返回两条记录,这让我感到困惑,因为 1620489600000(2021 年 5 月 8 日星期六 16:00:00 GMT+0000)应该是比两条记录的 create_at 字段晚的时间戳方式。
确实我知道这也可以通过指定格式为 2012-11-03 00:00:00
的时间来实现,但我只是想知道:
- 我们是否可以使用 unix 时间戳有效地查询
datetime
子句中的where
列? - 如果不是,为什么上面的
select
语句返回两条记录?
解决方法
为了比较两种不同的数据类型,MySQL 会自动将其中一种转换为另一种。在这种情况下,它尝试对日期进行编号。结果是什么?见here
日期转换为
20121103000000
大于
1620489600000
因此您的 WHERE 子句中的结果为真并返回所有记录。
如果您需要从 Unix 时间戳开始,您可以使用 this:
WHERE created_at > FROM_UNIXTIME(1620489600000 / 1000)
请注意,我除以 1000 是因为 Unix 时间 has to be in seconds 而不是毫秒。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。