У меня есть срок годности. Я хочу проверить, что срок действия меньше текущего или нет. и если дата истечения срока действия ex:27-03-2011. Я хочу выполнить какую-то операцию, если срок действия истек: 27-04-2011, ничего делать не нужно.
Я хочу проверить и сообщить данные только за один месяц, после одного месяца истечения срока действия я не хочу проверять, как это сделать в запросе?
Таблица 1
Тип поля
Срок действия
Пример: 20 января 2012 г.
1 ответ
Пожалуйста, используйте форматы даты и времени MySQL, они имеют вид ГГГГ-ММ-ДД (формат даты ISO). Все функции даты и времени MySQL http://dev .mysql.com/doc/refman/5.5/en/date-and-time-functions.html работают с использованием этого формата.
MySQL также имеет арифметику даты и времени. Вы можете писать такие выражения, как "СЕЙЧАС() - ИНТЕРВАЛ 5 дней", что также объясняется здесь http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
root@localhost [(none)]> select now(), now() - interval 5 day\G
*************************** 1. row ***************************
now(): 2011-03-28 13:49:24
now() - interval 5 day: 2011-03-23 13:49:24
1 row in set (0.00 sec)
Чтобы вывести список всех элементов старше 5 дней, используйте
SELECT id FROM sometable WHERE created > NOW() - INTERVAL 5 DAY
Или аналогичный запрос. Есть несколько вещей, на которые следует обратить внимание:
- индекс для созданного должен существовать, чтобы сделать это быстро
- созданное имя столбца не является частью выражения, чтобы его можно было использовать с индексом. Мы специально пишем «создано > СЕЙЧАС() - ИНТЕРВАЛ 5 ДНЕЙ», а не «создано + ИНТЕРВАЛ 5 ДНЕЙ > СЕЙЧАС()» — в этом выражении используется имя столбца, созданное в выражении, поэтому использование индекса невозможно.
- если вы используете это с запросом на удаление, вы в основном удаляете старые данные с левой стороны стрелки времени, вставляя новые данные с правой стороны стрелки времени. Может быть, вы хотите использовать MySQL PARTITIONS, а затем PARTITION BY RANGE вашу таблицу. Это позволит вам удалить старые данные с помощью ALTER TABLE DROP PARTITION, выбросив раздел, скажем, 5 дней назад, создав новый на завтра. Во многих случаях это намного быстрее, чем DELETE.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными.