Маленький нюанс сортировки дат в MySql

16 мая 2012 г. | | |

Небольшое дополнение к предыдущей заметке о работе с датами в  MySql

Запрос:
SELECT `Number`, DATE_FORMAT(`Date`, '%d.%m.%Y') as `Date` FROM `actions` WHERE IsActive=1  ORDER BY Date ASC
Вроде отрабатывает правильно: самые ближайшие по дате мероприятия наверху.

Но что-то тут неправильно. Не может MySql работать с датами не в родном формате. Добавим еще одно мероприятие, которое будет в другом месяце, и увидим такое:
Предчувствие не обмануло. MySql конвертирует отформатированное в DATE_FORMAT() значение в свой внутренний формат даты, и , конечно же, получается немного другая дата - получается 2012-05-06, в свете которой имеет довольно логичный результат. Чтобы избежать такого конвертирования, нужно указывать явно исходный столбец таблицы (в первоначальном запросе сортировка идёт по отформатированному значению из-за совпадения имён).
SELECT `Number`, DATE_FORMAT(`Date`, '%d.%m.%Y') as `Date` FROM `actions` WHERE IsActive=1  ORDER BY actions.Date ASC


0 коммент.:

Отправить комментарий