Есть ли способ захватить самое последнее время суток. Если ваши данные в базе данных отформатированы следующим образом: 07:00 и 20:00 и 12:00. Сорта вроде max(). Но на время. В запросе Mysql.MYSQL последнее время
Благодаря Эрик
Есть ли способ захватить самое последнее время суток. Если ваши данные в базе данных отформатированы следующим образом: 07:00 и 20:00 и 12:00. Сорта вроде max(). Но на время. В запросе Mysql.MYSQL последнее время
Благодаря Эрик
Было бы лучше сохранить его в другом формате, а не в виде текста. Или, по крайней мере, хранить его в 24-часовом формате, тогда будет работать простой вид. Вы можете преобразовать его в 12-часовой формат при отображении данных пользователю.
Но если вы не можете изменить схему базы данных, попробуйте следующее:
SELECT *
FROM your_table
ORDER BY STR_TO_DATE(your_time, '%h:%i%p') DESC
LIMIT 1
Обратите внимание, что это не будет иметь возможность использовать индекс для выполнения сортировки.
Это также неправильно соответствует цифрам «12: .....». Вы должны иметь четыре поля сортировки, left = 12am, затем right (your_time), затем left = 12pm, затем your_time. –
@Ben Lee: О да, я совсем забыл, что 12:00 должен сортировать * до * 01:00. Эффективно «12:» следует сортировать так, как если бы было «00:». Таким образом, еще один способ решить это может быть упорядочен по полю после замены '12: 'на '00:'. –
Даже с изменением, которое вы сделали, это все равно будет помещено где-нибудь между «12:00 pm» (полдень) и «12:59 pm» в самой верхней части списка, а не в середине. Вы должны поместить функцию REPLACE в оба параметра порядка: «RIGHT (REPLACE (your_time, '12: ', '00:'), 2) DESC, REPLACE (your_time, '12: ', '00:') DESC' –
Вы можете просто сортировать.
select time_column from table order by time_column desc limit 1;
нет, он не может. это поле строки, и у него есть части AM и PM. –
Предполагая, что вы имеете дело с полем DATETIME в вашем MySQL, вы можете использовать этот запрос, чтобы получить максимальное время в день:
SELECT DATE(YourDateField), MAX(TIME(YourDateField)) FROM YourTable
GROUP BY DATE(YourDateField)
Когда вы имеете дело с полем VARCHAR, вы можете попробовать взломать вот так:
SELECT YourDateField, SUBSTRING(MAX(
CASE WHEN YourTimeField LIKE '%AM%' THEN '0' ELSE '1' END
+ REPLACE(YourTimeField, '12:', '00:')
), 2)
GROUP BY YourDateField
он сказал, что не имеет дело с полем datetime, но с полем строки, которое имеет am/pm. –
Нет, он сказал, что его поле было * отформатировано * с AM/PM. Он не упоминал о типе своего поля. – thomaspaulb
Вместо этого вы должны попробовать STR_TO_DATE(), если используете строку. Если ваше время всегда в формате чч: mmAMPM, вы можете использовать:
MAX(STR_TO_DATE(YourTimeField,'%h:%i%p'))
Это преобразует строку в то время, без необходимости разделить его на подстроки или что-нибудь, так что MySQL будет тогда видеть 09:07 как 09:07:00 и 14:35 вечера в 14:35:00, а затем легко сможет определить MAX этого.
И я набрал этот ответ слишком медленно: -P – spanky
+1 в любом случае, заметив, что теперь, когда выбрано только одно поле, MAX будет работать. Я не обновлял свой ответ, чтобы использовать MAX после его изменения, чтобы использовать STR_TO_DATE. –
Если это вообще возможно, лучше всего конвертировать поле в datetime. Тогда:
Как автоматически заполнить поле datetime в php? – Eric
Если у вас есть временная метка, вы можете использовать функцию даты() PHP или функцию MySQL FROM_UNIXTIME для преобразования в формат даты и времени MySQL. В противном случае просто заполните его, используя формат YYYY-MM-DD hh: mm: ss, используя 24-часовое время. –
Какая у вас колонка? –
Его поле Char – Eric