Как рассчитать интервал между datetime в MySQL?

Например, как вычислить интервал между этими двумя датами:

2009-09-18 00:00:00

2009-10-17 00:00:00

ИЗМЕНИТЬ

Я хочу получить интервал в формате year-month-day hour: min: seconds

Ответ 1

Как насчет использования datediff:

mysql> select abs(datediff('2009-09-18 00:00:00', '2009-10-17 00:00:00'));
+-------------------------------------------------------------+
| abs(datediff('2009-09-18 00:00:00', '2009-10-17 00:00:00')) |
+-------------------------------------------------------------+
|                                                          29 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

Указание руководства:

DATEDIFF() возвращает expr1 – expr2выраженное как значение в днях от одного с другой. expr1 и expr2 являются выражениями даты или даты и времени.
Только части даты являются значениями используемых при расчете.

Ответ 2

Вы можете попробовать DATEDIFF или TIMEDIFF

Ответ 3

Вы можете просто вычесть datetimes, и он вернет значение:

select (now() - интервал 2 дня) - (теперь() - интервал 5 дней);

Результат не является datetime (это некоторая десятичная кодированная дата - 3000000 в течение трех дней в этом случае), но неверно говорить о дате и времени как одном и том же типе данных.

Ответ 4

Или используйте timestampdiff() следующим образом:

timestampdiff (микросекунды, yourtime, теперь())

первым параметром является единица измерения mysql datetime, может быть "microsecond, second, minute, hour, day, year", и эта функция означает третий параметр datetime минус 2-й параметр datetime.

mysql> select timestampdiff(second, "2009-09-18 00:00:00", "2009-10-17 00:00:00");
+---------------------------------------------------------------------+
| timestampdiff(second, "2009-09-18 00:00:00", "2009-10-17 00:00:00") |
+---------------------------------------------------------------------+
|                                                             2505600 |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)