select 数据(按 unix 时间戳)
select data by unix timestamp
以下是我创建的 table 及其记录:
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;
并且两条记录都可以 returned,这让我感到困惑,因为 1620489600000(2021 年 5 月 8 日星期六 16:00:00 GMT+0000)应该是比 create_at 字段晚的时间戳方式两条记录。
确实我知道这也可以通过指定格式为 2012-11-03 00:00:00
的时间来实现,但我只是想知道:
- 我们是否可以使用 unix 时间戳有效地查询
where
子句中的 datetime
列?
- 如果不是,为什么上面的
select
语句return都记录了?
比较两种不同的数据类型MySQL 自动将其中一种转换为另一种。在这种情况下,它会尝试生成日期的数字。结果是什么?参见 here
日期转换为
20121103000000
大于
1620489600000
因此您的 WHERE 子句中的结果为真并且 returns 所有记录。
如果您需要从 Unix 时间戳开始,您可以使用 this:
WHERE created_at > FROM_UNIXTIME(1620489600000 / 1000)
请注意,我除以 1000 是因为 Unix 时间 has to be in seconds 而不是毫秒。
以下是我创建的 table 及其记录:
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;
并且两条记录都可以 returned,这让我感到困惑,因为 1620489600000(2021 年 5 月 8 日星期六 16:00:00 GMT+0000)应该是比 create_at 字段晚的时间戳方式两条记录。
确实我知道这也可以通过指定格式为 2012-11-03 00:00:00
的时间来实现,但我只是想知道:
- 我们是否可以使用 unix 时间戳有效地查询
where
子句中的datetime
列? - 如果不是,为什么上面的
select
语句return都记录了?
比较两种不同的数据类型MySQL 自动将其中一种转换为另一种。在这种情况下,它会尝试生成日期的数字。结果是什么?参见 here
日期转换为
20121103000000
大于
1620489600000
因此您的 WHERE 子句中的结果为真并且 returns 所有记录。
如果您需要从 Unix 时间戳开始,您可以使用 this:
WHERE created_at > FROM_UNIXTIME(1620489600000 / 1000)
请注意,我除以 1000 是因为 Unix 时间 has to be in seconds 而不是毫秒。