超过MySQL的TIME值限制838:59:59

标题可能有些混乱,所以请允许我解释一下。我正在使用一张桌子记录我的工作日志。每天我都会创建一个条目,说明从什么时间到什么时间工作,并添加一条注释来描述我的工作。

然后,我使用查询来比较时间戳,以准确计算出当天我工作了多少小时和几分钟。此外,我使用查询来计算我全年工作的小时数和分钟数的总和。那就是我遇到问题的地方。我的查询如下。

SELECT TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(entry_end_time, entry_start_time)))), '%H:%i') 

AS total FROM entry

WHERE entry_date BETWEEN '2012-01-01' AND '2012-12-31' AND user_id = 3

默认情况下,MySQL

TIME字段允许的时间范围为’-838:59:59’至‘838:59:59’。不过,今年我目前记录了900多个小时的工作,我希望查询结果能反映出这一点。相反,结果是838:59:59,这很有意义,因为那是极限。

有什么办法可以解决这个问题,以便查询结果可以超过839小时,还是我必须使用PHP之类的方法遍历整个表并将其全部累加?如果可能,我有点想避免这种情况。

回答:

我只需要检索工作的总秒数,然后根据应用程序的表示层的要求将其转换为小时/分钟(毕竟,这是除以60的简单情况):

<?

$dbh = new PDO("mysql:dbname=$dbname", $username, $password);

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

$qry = $dbh->prepare('

SELECT SUM(TIME_TO_SEC(entry_end_time)-TIME_TO_SEC(entry_start_time))

FROM entry

WHERE entry_date BETWEEN :start_date AND :end_date

AND user_id = :user_id

');

$qry->execute([

':start_date' => '2012-01-01',

':end_date' => '2012-12-31',

':user_id' => 3

]);

list ($totalMins, $remngSecs) = gmp_div_qr($qry->fetchColumn(), 60);

list ($totalHour, $remngMins) = gmp_div_qr($totalMins, 60);

echo "Worked a total of $totalHour:$remngMins:$remngSecs.";

?>

以上是 超过MySQL的TIME值限制838:59:59 的全部内容, 来源链接: utcz.com/qa/428357.html

回到顶部