Нормативная модель должны использовать DATE
тип данных для значений даты магазина.
Похоже, вы сохраняете свои значения «даты» как VARCHAR в формате «mm-dd-yy». Сравнение выражений VARCHAR
выполняется символом по символу слева направо. Представление символа, с первым месяцем, не находится в каноническом порядке, то есть некоторая величина значений mm-dd-yy не будет сортироваться в порядке дат, например. '01 -01-13 '(январь 2013 г.) будет сортироваться до '11 -27-12' (ноябрь 2012 г.).
Простейший подход в терминах оператора SQL состоит в том, чтобы преобразовать VARCHAR в тип данных DATE
и сравнить его с выражением, которое также возвращает DATE
.
DELETE FROM `upcoming` WHERE STR_TO_DATE(`Date`,'%m-%d-%y') < CURDATE()
С точки зрения производительности MySQL не может выполнять сканирование диапазона индексов для удовлетворения этого предиката. Каждая строка в таблице должна быть проверена, чтобы выполнить преобразование, а затем сравнение. Если столбец был сохранен как DATE
, то в предикат можно было бы указать пустой столбец, и MySQL мог бы использовать сканирование диапазона индексов.
ТАКЖЕ: '%M'
спецификатор формата возвращает название месяца «январь», «февраль», и т.д. '%m'
спецификатор возвращает числовой месяц «01», «02».
Не 'date' зарезервированное слово в mysql? – Babblo
Если ваши даты отформатированы mm-dd-yy, почему ваш запрос использует mm/dd/yy? –
Это может быть полезно: [Удаление всех строк старше 5 дней] (http://stackoverflow.com/questions/5853543/deleting-all-rows-older-than-5-days) – showdev