Ваша проблема в том, что ваши даты не в правильном формате даты, поэтому они сортируются как строки. Так, например, 31-June-2008
"до" 9-June-2008
. Чтобы правильно отсортировать их, вам нужно преобразовать их в даты, что вы можете сделать, используя STR_TO_DATE
:
STR_TO_DATE(Date, '%e-%M-%Y')
Примечание. Я предположил, что если день месяца меньше 10, он будет выглядеть, например, как 4-March-2001
. Если это похоже на 04-March-2001
, вы должны изменить %e
на %d
.
В запросе вы можете использовать это как
SELECT *
FROM yourtable
ORDER BY STR_TO_DATE(Date, '%e-%M-%Y')
Если вы хотите изменить структуру таблицы, возможно, проще всего добавить сгенерированный столбец :
ALTER TABLE yourtable ADD sdate DATE AS (STR_TO_DATE(Date, '%e-%M-%Y'))
Затем вы можете сортировать по sdate
вместо Date
.
Демонстрация на dbfiddle