Выборка строк с обновленной отметкой времени старше 1 дня в mysql - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть таблица со схемой:

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.

Для этого я написал следующий запрос, взяв идею из Выборка строк, добавленных в последний час :

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

Хотя есть много строк, обновленных с отметкой времени 2 года Я получаю 0 здесь.

1 Ответ

3 голосов
/ 05 апреля 2020

Нельзя использовать DATE для целочисленного значения временной метки; вы должны преобразовать его в DATE, используя FROM_UNIXTIME:

SELECT COUNT(*) 
FROM a
WHERE FROM_UNIXTIME(updated_at) < NOW() - INTERVAL 1 DAY

Обратите внимание, что вам не нужно использовать DATE_SUB для вычитания интервала, вы можете просто написать арифметика c напрямую.

...