我有一个带有如下模式的表:
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行中编写了以下查询:
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
来减去区间,只需直接编写算术运算即可。