Ответ 1
Если вы счастливы игнорировать временную часть в столбцах, DATEDIFF() даст вам разницу, которую вы ищете в дни.
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
| 17 |
+------+
Как я могу получить разницу между двумя временными метками в днях? Должен ли я использовать столбец 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)
Если вы счастливы игнорировать временную часть в столбцах, DATEDIFF() даст вам разницу, которую вы ищете в дни.
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
| 17 |
+------+
Я знаю, довольно старый, но я скажу только ради этого - я искал ту же проблему и попал сюда, но мне нужна разница в днях.
Я использовал SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24
Unix_timestamp возвращает разницу в секундах, а затем я просто делю на минуты (секунды/60), часы (минуты/60), дни (часы/24).
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)
Если вы хотите вернуться в полном формате TIMESTAMP, чем попробуйте: -
SELECT TIMEDIFF(`call_end_time`, `call_start_time`) as diff from tablename;
вернуться как
diff
- - -
00:05:15
SELECT DATEDIFF( now(), '2013-06-20' );
здесь lateiff принимает два аргумента "до даты", "от даты"
Что я сделал, используя функцию now(), я не могу получить. дней с 20 июня 2013 года по сегодняшний день.
Если вам нужна разница в днях учета до секунды:
SELECT TIMESTAMPDIFF(SECOND,'2010-09-21 21:40:36','2010-10-08 18:23:13')/86400 AS diff
Он вернется diff
16.8629
SELECT DATEDIFF (max_date, min_date) в качестве дней из моей таблицы.
Это работает, даже если col max_date
и min_date
находятся в строковых типах данных.