Я работаю над базой данных, которая хранит даты в поле varchar(10)
mysql (очень печально).
Я не могу изменить структуру базы данных (я создаю небольшой плагин), но мне нужнозапросить в базе данных поиск строк, где это поле данных находится между следующими 10 днями.
Пример:
| fid | fdate |
| 1 | 10/09/2010 |
| 2 | 17/09/2010 |
| 3 | 19/09/2010 |
Мне нужно получить строки с fid 1 и 2, потому что дата <= сейчас + 10 дней. </p>
Обычно я делаю такой запрос:
SELECT fid FROM table WHERE fdate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
Или, если дата в формате `ггггммдд ':
SELECT fid FROM table WHERE fdate <= DATE_FORMAT(NOW(), '%Y%m%d');
Но они бесполезны с форматом dd/mm/yyyy
.
Я понял с
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 и подстроки,и предложение having
не поможет скорости запроса.
Есть идеи?
EDIT
После комментария Адриано правильное решение -
SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY);
так что я могу избежать конкат и иметь пункт.