SQL (?): Подсчет времени между двумя значениями datetime - PullRequest
4 голосов
/ 14 октября 2008

Каков наилучший способ подсчета времени между двумя значениями datetime, извлеченными из MySQL, когда мне нужно подсчитать только время между часами 08: 00: 00-16: 00: 00.

Например, если у меня есть значения 2008-10-13 18:00:00 и 2008-10-14 10:00:00, разница во времени должна быть 02: 00: 00.

Могу ли я сделать это с помощью SQL или каков наилучший способ сделать это? Я создаю сайт и использую PHP.

Спасибо за ваши ответы.

РЕДАКТИРОВАТЬ: Точная вещь в том, что я пытаюсь подсчитать время, когда "билет" был в определенном состоянии в рабочее время. Время может составить пару недель.

РЕДАКТИРОВАТЬ2: У меня нет проблем с подсчетом фактической разницы во времени, но вычитая это время, 00: 00: 00-08: 00: 00 и 16: 00: 00-00: 00: 00 в день. *

-Samuli

Ответы [ 3 ]

10 голосов
/ 14 октября 2008

Функция TIMEDIFF

TIMEDIFF () возвращает expr1 - expr2 выражается как значение времени. expr1 и expr2 - это время или дата и время выражения, но оба должны быть того же типа.

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
    ->                 '2000:01:01 00:00:00.000001');
        -> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001',
    ->                 '2008-12-30 01:01:01.000002');
        -> '46:58:57.999999'
1 голос
/ 14 октября 2008

Я думаю, вам следует вычислить разницу в вашем собственном коде, а не использовать более сложное предложение SQL, потому что:

  • Этот расчет, кажется, является частью вашей бизнес-логики. Кажется, легче поддерживать его, если вы интегрируете его с остальной частью своего бизнес-кода.
  • База данных часто является узким местом, поэтому не загружайте ее больше, чем нужно.
0 голосов
/ 14 октября 2008

Вы можете попробовать это на PHP, но я думаю, что это будет быстрее в БД

код для возврата разницы в массиве

...