MySql разница между двумя временными метками в днях? - PullRequest
48 голосов
/ 30 марта 2010

Как я могу получить разницу между двумя временными метками в днях? Должен ли я использовать столбец datetime для этого?


Я переключил свою колонку на дату и время. Простое вычитание не дает мне результата в днях.
mysql> SELECT NOW(), last_confirmation_attempt, NOW() - last_confirmation_attempt AS diff  FROM DateClubs HAVING diff IS NOT NULL ;
+---------------------+---------------------------+-----------------+
| NOW()               | last_confirmation_attempt | diff            |
+---------------------+---------------------------+-----------------+
| 2010-03-30 10:52:31 | 2010-03-16 10:41:47       | 14001084.000000 |
+---------------------+---------------------------+-----------------+
1 row in set (0.00 sec)

Я не думаю, что diff в секундах, потому что когда я делю diff на количество секунд в дне (86 400), я не получаю чувственного ответа:

mysql> SELECT NOW(), last_confirmation_attempt, ( NOW() - last_confirmation_attempt) / 86400 AS diff  FROM DateClubs HAVING diff IS NOT NULL ;
+---------------------+---------------------------+----------------+
| NOW()               | last_confirmation_attempt | diff           |
+---------------------+---------------------------+----------------+
| 2010-03-30 10:58:58 | 2010-03-16 10:41:47       | 162.0568402778 |
+---------------------+---------------------------+----------------+
1 row in set (0.00 sec)

Ответы [ 7 ]

102 голосов
/ 30 марта 2010

Если вы счастливы игнорировать часть времени в столбцах, DATEDIFF () даст вам разницу, которую вы ищете в днях.

SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
|   17 |
+------+
12 голосов
/ 23 марта 2012

Я знаю, что он довольно старый, но я скажу просто ради этого - я искал ту же проблему и попал сюда, но мне нужна была разница в днях.

Я использовал SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 Unix_timestamp возвращает разницу в секундах, а затем я просто делю на минуты (секунды / 60), часы (минуты / 60), дни (часы / 24).

5 голосов
/ 11 февраля 2015

Если вы хотите вернуться в полном формате TIMESTAMP, попробуйте: -

 SELECT TIMEDIFF(`call_end_time`, `call_start_time`) as diff from tablename;

возврат как

     diff
     - - -
    00:05:15
5 голосов
/ 30 марта 2010
CREATE TABLE t (d1 timestamp, d2 timestamp);

INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 05:00:00');
INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-11 00:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-04-01 13:00:00');

SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t;

+---------------------+---------------------+------+
| d2                  | d1                  | diff |
+---------------------+---------------------+------+
| 2010-03-30 05:00:00 | 2010-03-11 12:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-11 12:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-11 00:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-10 12:00:00 |   20 |
| 2010-04-01 13:00:00 | 2010-03-10 12:00:00 |   22 |
+---------------------+---------------------+------+
5 rows in set (0.00 sec)
4 голосов
/ 01 августа 2017

Если вам нужна разница в днях учета с точностью до секунды:

SELECT TIMESTAMPDIFF(SECOND,'2010-09-21 21:40:36','2010-10-08 18:23:13')/86400 AS diff

Вернется
diff
16.8629

3 голосов
/ 25 июня 2013

SELECT DATEDIFF( now(), '2013-06-20' );

здесь datediff принимает два аргумента: «актуальный», «от даты»

То, что я сделал, с помощью функции now () я могу получить no. дней с 20 июня 2013 года по сегодняшний день.

0 голосов
/ 20 декабря 2017

ВЫБРАТЬ DATEDIFF (max_date, min_date) как дни из моей таблицы. Это работает, даже если col max_date и min_date имеют строковые типы данных.

...