2012-06-13 2 views
0

Я часами пытаюсь использовать разные способы заказа по дате. Мне жаль, что не было strtotime (поле), которое будет делать то, что мне нужно.MySQL по дате (M D, Y, H: M: S am pm)

Я пробовал общаться с UNIX_TIMESTAMP, STR_TO_DATE, и я просто не могу понять это.

Я пытаюсь поставить их в указанном ниже порядке:

June 13, 2012, 4:45:28 pm 
May 31, 2012, 10:41 am 
June 12, 2012, 6:40:34 pm 
June 06, 2012, 3:05:22 am 
June 10, 2012, 7:59:31 pm 

Я пробовал кучу разных подходов, это последняя одна я работаю на ...

SELECT name,lastonline FROM `users` ORDER BY STR_TO_DATE(UPPER(lastonline), 
     '%M %d,%Y, %H:%i:%s') DESC 

Кажется, что это как можно ближе, и я не принимаю во внимание «AM» или «PM». Я попытался добавить% p в конец, но по какой-то причине это похоже на то, что UPPER ничего не делает. Я также попытался использовать% r.

Любые идеи?

+0

Я полагаю, что исправление схемы так, что это связанный с датой тип, а не текст не может быть и речи? –

+0

Да, он должен храниться как varchar, если кто-то не будет проходить через весь код каждый раз, когда дата ссылается и исправляет его ... Я не кодировал его, чтобы использовать дату varchar, я всегда просто использую strtotime при вводе в базу данных или временную метку. – E3pO

+0

В долгосрочной перспективе, я думаю, было бы лучше сделать эту работу. Ваша схема принципиально нарушена - почему конверсии повсюду? –

ответ

1

MySQL docs говорят, что конструкцию 12-часового времени и AM/PM следует анализировать как %r в одном виде, а не как %H:%i:%s %p.

Хотя я считаю, что это нехорошо, это определенно работает.

0

вы можете использовать HH24 вместо этого, чтобы получить полный спектр часов.

Смежные вопросы