Mysql: преобразование даты из От «дд / мм / гггг» до «ггггммдд»

Я работаю над базой данных, которая хранит даты в 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.

6
задан Justin K 7 September 2010 в 15:11
поделиться