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 的时间来实现,但我只是想知道:

比较两种不同的数据类型MySQL 自动将其中一种转换为另一种。在这种情况下,它会尝试生成日期的数字。结果是什么?参见 here

日期转换为

20121103000000

大于

1620489600000

因此您的 WHERE 子句中的结果为真并且 returns 所有记录。

如果您需要从 Unix 时间戳开始,您可以使用 this:

WHERE created_at > FROM_UNIXTIME(1620489600000 / 1000)

请注意,我除以 1000 是因为 Unix 时间 has to be in seconds 而不是毫秒。