Я округляю время до ближайшего часа, используя следующий запрос:
SELECT post_id, DeliveryDate, TIME_FORMAT(DeliveryTime, '%h:00:00 %p') AS rounded_time FROM `orders` WHERE DeliveryType='delivery' AND DeliveryDate >= CURDATE() - Interval 30 DAY ORDER BY `DeliveryDate`
ИТ правильно округляет все, но применяет «AM» ко всем результатам, хотя большинство из них находятся в PM в db.
Вот исходные данные БД. введите здесь описание изображения Как мне заставить это правильно читать AM/PM при использовании округления, как я?
DeliveryTime
столбца равно VARCHAR
, поэтому сначала вы должны преобразовать его в TIME
с помощью STR_TO_DATE(), а затем применить форматирование.
Если вы используете MySql 8.0, это будет работать:
SELECT TIME_FORMAT(STR_TO_DATE(DeliveryTime, '%h:%i%p'), '%h:00:00 %p') rounded_time
FROM orders
Смотрите демо.
Если вы используете предыдущую версию, вы должны объединить часть даты с DeliveryTime
, чтобы преобразовать ее в DATETIME
:
SELECT TIME_FORMAT(STR_TO_DATE(CONCAT(CURRENT_DATE, ' ', DeliveryTime), '%Y-%m-%d %h:%i%p'), '%h:00:00 %p') rounded_time
FROM orders
Смотрите демо.
Обратите внимание, что этот код просто удаляет минуты из времени. На самом деле он не округляется до ближайшего часа.
Но если все ваши значения времени равны hh:00
и hh:30
, то это сработает.
Большое спасибо, что исправили. Я на MYSQL 8, поэтому я принял это как ответ
Это должно работать. Пожалуйста, предоставьте образцы данных, текущие и желаемые результаты в виде табличного текста.