Я работаю над базой данных, которая хранит даты в varchar (10)
поле mysql (так грустно).
Я не могу изменить структуру базы данных (я создаю небольшой плагин), но мне нужно запросить базу данных, чтобы найти строки, где это поле данных находится в течение следующих 10 дней.
Пример:
| fid | fdate |
| 1 | 10/09/2010 |
| 2 | 17/09/2010 |
| 3 | 19/09/2010 |
Мне нужно получить строки с идентификаторами 1 и 2, потому что дата <= сейчас + 10 дней.
Обычно я делаю такой запрос:
SELECT fid FROM table WHERE fdate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
Или, если дата в формате «ггггммдд»:
SELECT fid FROM table WHERE fdate <= DATE_FORMAT(NOW(), '%Y%m%d');
Но они бесполезны с форматом дд / мм / гггг
.
Я разобрался с
SELECT fid, CONCAT(SUBSTRING(fdate, 7, 4), SUBSTRING(fdate, 4, 2), SUBSTRING(fdate, 1, 2)) AS mydate FROM table HAVING mydate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
, но я думаю, что перестройка формата даты с помощью concat и подстроки немного переборщила, а с предложением
не поможет скорости запроса.
Есть идеи?
РЕДАКТИРОВАТЬ
После комментария Адриано правильным решением будет
SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY);
, поэтому я могу избежать предложений concat и Have.