Я пытаюсь найти запрос MySQL, который получит время, следующее за следующей половиной часа от указанной даты / времени. Я имею в виду следующее полчаса, а не полчаса.
Так, например:
- Если дата-время было "2009-10-27
08:15:24 ", ответ будет
"2009-10-27 08:30:00"
- Если
datetime было "2009-10-27 08:49:02",
ответ будет "2009-10-27
9:30:00" .
Я столкнулся с этой страницей , которая относится к SQL Server, и к концу этого потока возникла аналогичная проблема. Но это не совсем то же самое, и оно опирается на функцию, которой нет в MySQL.
Вот более полный список примеров и ожидаемых возвращаемых значений:
2009-10-27 08:15:24 should return 2009-10-27 08:30:00
2009-10-27 08:49:02 should return 2009-10-27 09:30:00
2009-10-27 23:49:10 should return 2009-10-28 00:30:00
2009-10-27 10:30:00(.000001) should return 2009-10-27 11:30:00
(Обратите внимание, что в четвертом примере, поскольку точная половина прошедшего (10: 30: 00.0000000) уже прошла, найдена точка следующей половины прошедшего.)
Я пытался использовать такую вещь:
SELECT IF( (MINUTE(NOW()) < 30), HOUR(NOW()), (HOUR(NOW()) + 1) )
(после которого будет происходить добавление строки CONCATed), но она потерпит неудачу из-за перехода на другой день, и она будет по своей природе «хакерской».
Может кто-нибудь предложить подходящий алгоритм? Я не ожидал бы полного ответа (хотя это было бы хорошо!), Но предложения относительно типа алгоритма были бы полезны. Я рисую листы бумаги уже два часа! У меня есть предположение, что использование модуля может быть полезным, но я недостаточно знаком с ним.
Ответ будет передан в класс PHP позже, но я бы предпочел реализовать его на уровне SQL, если это возможно, поскольку остальная часть запроса также эффективно выполняет другие функции сравнения дат.