Функция MYSQL TIMEDIFF не работает долгое время - PullRequest
7 голосов
/ 15 апреля 2011

Mysql функция Timediff не работает для меня для длинной даты .. На самом деле мне нужно получить разницу во времени между полем date_time и now ()

поэтому я использовал этот запрос

SELECT `date_time`,now(),timediff(`date_time`,now()) FROM `table_datetime`

У меня есть два ряда

date_time 2011-04-25 17:22:41 2011-06-14 17: 22: 52

мой результат enter image description here

Здесь результат первой строки изменяется, но не для второй, этот всегда возвращает

838:59:59

постоянно ... Почему это не дает правильный результат

Спасибо за помощь!

Ответы [ 3 ]

10 голосов
/ 15 апреля 2011

вместо TIMEDIFF используйте DATEDIFF с EXTRACT

SELECT DATEDIFF('2011-06-14 17:22:52', NOW()) * 24
+ EXTRACT(HOUR FROM '2011-06-14 17:22:52')
- EXTRACT(HOUR FROM NOW())

Спасибо @ rekaszeru за полезную ссылку

Альтернативное решение (получите разницу вСекунды)

SELECT TIMESTAMPDIFF(SECOND,NOW(),'2011-06-14 17:22:52');

Ссылка

EXTRACT

TIMESTAMPDIFF

4 голосов
/ 15 апреля 2011

Вы должны взглянуть на эту проблему и найти решение, зная эти вещи

0 голосов
/ 24 августа 2013

Альтернативным решением этой проблемы является написание пользовательской функции. Пожалуйста, имейте в виду, что возвращаемое значение больше не объект времени, а строка. Так что в MySQL вы не можете использовать его для дальнейшего расчета:

DELIMITER $$

DROP FUNCTION IF EXISTS `big_time_diff`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `big_timediff`(s_start VARCHAR(20), s_end VARCHAR(20)) RETURNS TEXT CHARSET latin1
BEGIN
    DECLARE s_hour VARCHAR(20);
    DECLARE s_rest VARCHAR(20);

    SET s_hour = ABS(TIMESTAMPDIFF(HOUR, s_end, s_start));
    SET s_rest = TIME_FORMAT(TIMEDIFF(s_start, s_end), ':%i:%s');

    RETURN INSERT(s_rest, LOCATE('-', s_rest) + 1, 0, IF(LENGTH(s_hour) > 2, s_hour, LPAD(s_hour, 2, 0)));
END$$

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...