Разница между двумя датами в MySQL - PullRequest
157 голосов
/ 21 января 2011

Как рассчитать разницу между двумя датами в формате YYYY-MM-DD hh: mm: ss и получить результат в секундах или миллисекундах?

Ответы [ 13 ]

282 голосов
/ 21 января 2011
SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');
-- result: 22:00:59, the difference in HH:MM:SS format


SELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00'); 
-- result: 79259  the difference in seconds

Итак, вы можете использовать TIMESTAMPDIFF для своих целей.

34 голосов
/ 21 января 2011

Если вы работаете со столбцами DATE (или можете привести их к столбцам даты), попробуйте DATEDIFF (), а затем умножьте на 24 часа, 60 минут и 60 секунд (поскольку DATEDIFF возвращает diff в днях). Из MySQL:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

например:

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30 00:00:00') * 24*60*60
26 голосов
/ 06 декабря 2013

Получите разницу дат в днях, используя DATEDIFF

SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
|   17 |
+------+

ИЛИ

См. Ссылку ниже Разница MySql между двумя временными метками в днях?

8 голосов
/ 15 мая 2013
SELECT TIMESTAMPDIFF(HOUR,NOW(),'2013-05-15 10:23:23')
   calculates difference in hour.(for days--> you have to define day replacing hour
SELECT DATEDIFF('2012-2-2','2012-2-1')

SELECT TO_DAYS ('2012-2-2')-TO_DAYS('2012-2-1')
4 голосов
/ 21 января 2011
select 
unix_timestamp('2007-12-30 00:00:00') - 
unix_timestamp('2007-11-30 00:00:00');
1 голос
/ 21 января 2018
SELECT TIMESTAMPDIFF(SECOND,'2018-01-19 14:17:15','2018-01-20 14:17:15');

Второй подход

SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';

CURRENT_TIME() --this will return current Date
DATEDIFF('','') --this function will return  DAYS and in 1 day there are 24hh 60mm 60sec
0 голосов
/ 14 декабря 2016

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

SELECT * FROM `table` WHERE STR_TO_DATE(mydate, '%d/%m/%Y') < CURDATE() - INTERVAL 30 DAY AND STR_TO_DATE(date, '%d/%m/%Y') > CURDATE() - INTERVAL 60 DAY

//This is for a month

SELECT * FROM `table` WHERE STR_TO_DATE(mydate, '%d/%m/%Y') < CURDATE() - INTERVAL 7 DAY AND STR_TO_DATE(date, '%d/%m/%Y') > CURDATE() - INTERVAL 14 DAY

//This is for a week 

% d% m% Y - ваш формат даты

Этот запрос отображает запись между днями, которые вы там установили, как: ниже за последние 7 дней и выше за последние 14 дней, так что это будет ваша последняя недельная запись для отображения того же понятия для месяца или года. Какое бы значение вы ни указали в приведенную ниже дату, например: ниже по сравнению с 7 днями, так что другое значение будет вдвое больше 14 дней. То, что мы говорим здесь, получит все записи выше за последние 14 дней и ниже за последние 7 дней. Это недельная запись, которую можно изменить на 30-60 дней в течение месяца, а также в течение года.

Спасибо. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 15 июля 2014

Почему бы просто не

Выбрать сумму (Дата1 - Дата2) из ​​таблицы

Дата1 и дата2 - дата-время

0 голосов
/ 18 февраля 2014

Этот код вычисляет разницу между двумя датами в формате гггг ММ дд.

0 голосов
/ 27 июня 2013

Вы бы просто сделали это:

SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...