| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Большая проблема с TIME (am/pm) |
| Автор: JSawyer 26.1.2011, 11:48 |
| Есть база данных: id | blabla | date | time формат time: hours:minutes am/pm например: 1 | кошка | 2011-02-01 | 07:00 pm 2 | хомяк | 2011-02-01 | 08:00 am (почему не использовал стандартный формат time отдельный вопрос, сейчас уже нет возможности исправить) Так вот. Нужно взять данные из таблицы с сортировкой по времени: SELECT * FROM `animals` ORDER BY `time` ASC Естественно выборка по времени будет некорректна (07:00 pm получается раньше 08:00 am). Как нужно делать правильную выборку? |
| Автор: skyboy 26.1.2011, 11:54 |
перестроить таблицы. преобразовать дату + время в нормальный формат. если уж совсем никак, хотя бы преобразовать хранящееся время в 24-часовый формат. если и это - ну, никак, то в запрос делать ORDER BY locate('am', `time`), `time`. но это вообще жестяная жесть, так как не используются индексы. |
| Автор: Zloxa 26.1.2011, 11:56 |
| гоню |
| Автор: skyboy 26.1.2011, 14:52 |
че? а сколько раз в строке "07:00 am" встречается подстрока "am"? Два раза? может, у тебя между временем и "am/pm" бывает разное количество пробелов, тогда если locate для "07:00 ам" вернет 6, а для "06:00 ам" вернет 9, то да, сортировка будет неожиданная. тогда лучше доработать до "ORDER BY locate('am', `time`) = 0" и с чем не помог гугл? |