在 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
来减去一个区间,你可以直接写算术。
我有一个 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
来减去一个区间,你可以直接写算术。