Mysql Timediff函数对我来说不适用于长日期。其实我需要将date_time字段之间的时间差异化为现在()
所以我使用了这个查询
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
我的结果是
这里的第一行结果正在改变,但第二行结果不会改变
838:59:59
不断...为什么它没有给出正确的结果
感谢您的帮助!
答案 0 :(得分:10)
而不是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');
<强>参考强>
答案 1 :(得分:4)
你应该看看this issue,找到解决这些问题的解决方案
答案 2 :(得分:0)
此问题的替代解决方案是编写用户定义的函数。请记住,返回值不再是时间对象而是字符串。所以在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 ;