在 mysql 中获取更新时间戳早于 1 天的行

Fetching rows with updated at timestamp older than 1 day in mysql

我有一个 table 架构如下:

mysql> desc a;
  +---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at    | int(11)          | YES  |     | NULL    |                |
| updated_at    | int(11)          | YES  |     | NULL    |                |

updated_at我捕获了时间戳。

现在我想获取所有包含 updated_at < NOW() - INTERVAL 1 DAY 的行。

为此,我根据 Fetching rows added last hour 的想法编写了以下查询:

mysql> select count(*) from a where DATE(updated_at) < DATE_SUB(NOW(),INTERVAL 1 DAY);
+----------+
| count(*) |
+----------+
|        0 |
+----------+

虽然有很多行更新了 2 年的时间戳,但我在这里得到 0。

您不能对整数时间戳值使用 DATE;您必须使用 FROM_UNIXTIME:

将其转换为 DATE
SELECT COUNT(*) 
FROM a
WHERE FROM_UNIXTIME(updated_at) < NOW() - INTERVAL 1 DAY

请注意,你不必使用DATE_SUB来减去一个区间,你可以直接写算术。