У меня есть срок годности. Я хочу проверить, что срок действия меньше текущего или нет. и если дата истечения срока действия ex:27-03-2011. Я хочу выполнить какую-то операцию, если срок действия истек: 27-04-2011, ничего делать не нужно.

Я хочу проверить и сообщить данные только за один месяц, после одного месяца истечения срока действия я не хочу проверять, как это сделать в запросе?

Таблица 1

Тип поля

Срок действия

Пример: 20 января 2012 г.

0
Mohan 28 Мар 2011 в 13:35
Откуда берется срок годности и точно ли он в том формате, который вы показываете?
 – 
Pekka
28 Мар 2011 в 13:35
Я думаю, вам нужен запрос для сравнения дат, верно?
 – 
rakzz
28 Мар 2011 в 13:39
Да, мне нужно сравнить expdate<CURDATE()
 – 
Mohan
28 Мар 2011 в 13:46

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.
5
Isotopp 28 Мар 2011 в 15:53
Если это отвечает на ваш вопрос, вы должны «Принять» это как решение для улучшения кармы.
 – 
Isotopp
28 Мар 2011 в 16:36
Отличный ответ @Isotopp, ты только что облегчил мне жизнь ... я застрял со сравнением дат, и вот оно .....
 – 
Scrappy Cocco
25 Фев 2013 в 12:19