2013-06-27 2 views
0

У меня есть дата в этом формате.Как сортировать по месяцам и дням с помощью mysql

08 april 1989 
02 December 1984 
13 January 1986 

Я хотел бы отсортировать результаты, используя месяц и день, который имеет столбец «dateofb» и я сортировка как

13 january 1986 
08 april 1989 
02 december 1984 

Я использовал ниже код, который не работает нормально,

$sel = $db->query("select * from biography where dateofb >= (CURDATE() - INTERVAL 90 DAY) order by dateofb desc limit 0,3"); 

Я хотел бы отобразить 3 отсортированных результата на 90 дней.

+0

Если вы использовали стандартный формат даты (YYYY-MM-DD), это было бы тривиально сделать –

+2

Так вы говорите нам, что у вас есть дата, хранящаяся в varchar, и используя имена месяцев, а не числа, - кто создал эту базу данных? –

+0

Можете ли вы показать результаты по вашему запросу? Также, пожалуйста, покажите содержимое datofb – Muc

ответ

0

Возможно ли преобразование столбца dateofb в номер DATE? Это позволит вам делать то, что вы ищете. Формат у вас есть сейчас недопустим и должен быть преобразована через STR_TO_DATE(dateofb, '%d %M %Y')

Пример:

$sel = $db->query("select * from biography where STR_TO_DATE(dateofb, '%d %M %Y') >= (CURDATE() - INTERVAL 90 DAY) order by STR_TO_DATE(dateofb, '%d %M %Y') desc limit 0,3"); 

^- Смотрите, как грубо, что выглядит? Если dateofb был DATE столбец, вы можете просто сделать:

$sel = $db->query("select * from biography where dateofb >= (CURDATE() - INTERVAL 90 DAY) order by dateofb desc limit 0,3"); 

^- что ваш исходный запрос.

-1

Если поле «dateofb» является DATE или DATETIME:

SELECT 
    *  
FROM biography 
WHERE dateofb >= (CURDATE() - INTERVAL 90 DAY) 
ORDER BY MONTH(dateofb), DAY(dateofb) ASC 
LIMIT 0, 3 
Смежные вопросы