Функция MySQL TIMEDIFF не работает для длительной даты

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

Так что я использовал этот запрос

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

у меня две строки

дата_время 2011-04-25 17:22:41 2011-06-14 17:22:52

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

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

838:59:59

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

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

3 ответов


вместо 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');

ссылка

экстракт

TIMESTAMPDIFF


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


альтернативным решением этой проблемы является написание пользовательской функции. Имейте в виду, что возвращаемое значение больше не является объектом времени, а строкой. Поэтому в 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 ;