SQL получает последнее обновленное поле DATETIME от Ровно 3 недели назад - PullRequest
0 голосов
/ 30 октября 2018

Это тот же запрос, который я использовал в прошлом для поля DATE, однако для поля DATETIME он не работает.

SELECT
    *
FROM 
    user_log
WHERE 
    log_updated = DATE_SUB(DATE(NOW()), INTERVAL 21 DAY);

Я хочу назначить свидание ТОЛЬКО 21 день назад, но это может быть любое время в течение этого дня. Я не хочу 21 день и более (или 21 день и менее).

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Поскольку DATE(NOW()) совпадает с CURDATE(), вы также можете использовать

WHERE log_updated >= CURDATE() - INTERVAL 21 DAY
  AND log_updated  < CURDATE() - INTERVAL 20 DAY

Это может использовать индекс для log_updated.

Напротив, DATE(log_updated) ... не может использовать индекс для log_updated.

0 голосов
/ 30 октября 2018

Вы можете сделать следующее:

SELECT
    *
FROM 
    user_log
WHERE 
    DATE(log_updated) = DATE(NOW() - INTERVAL 21 DAY);

Но тогда это неэффективное ( sargable ) решение, поскольку использование функции в столбце будет препятствовать использованию индексации (если она определена).

Итак, подход лучше будет:

SELECT
    *
FROM 
    user_log
WHERE 
    log_updated >= DATE(NOW() - INTERVAL 21 DAY) AND 
    log_updated < DATE(NOW() - INTERVAL 20 DAY)

Обратите внимание , что я использовал день после требуемой даты для проверки максимальной границы (не включительно). Получено INTERVAL -20 DAY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...