当前位置: 首页 > 面试题库 >

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

金秦斩
2023-03-14
问题内容

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

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

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.";
?>


 类似资料:
  • 问题内容: 我本人已经遇到了限制,但是尽管在线上有很多闲聊,但我从未见过关于TIME数据类型的上限和下限 为何 如此的解释。http://dev.mysql.com/doc/refman/5.7/en/time.html上的官方参考资料说 TIME值的范围可能是’-838:59:59’到‘838:59:59’。小时部分可能是如此之大,因为“时间”类型不仅可以用来表示一天中的某个时间(必须少于24小

  • 出于某种原因JavaStream生成了更多的值(调用迭代器的hasNext()和Next()方法。 这是合成示例。 我有一个迭代器形式的生成器: 现在,我试图有一个平坦的Stream,它由几个迭代器组成 令人惊讶的是,我的输出如下: 因此,Stream生成的结果比forEach中传递给使用者的结果要多。即使它被显式设置为“parallel = false”。 在我的真实场景中,hasNext()和

  • 我使用Jmeter将工作负载注入部署在AWS EC2实例上的应用程序。测试必须非常庞大:它持续10个小时,工作负载配置文件具有双峰形状,在5分钟内大约有2600个请求。实际上我有一个m3。部署应用程序的xlarge实例,8 m3。xlarge实例每个实例运行一个jmeter实例。使用python脚本,要注入的工作负载在8个客户机实例之间进行分割,因此在示例中,如果原始工作负载要注入800个请求,那

  • 我有一个java Spring应用程序在AWS C4上运行。大(4 Gb内存)与Apache Tomcat 8.我得到java.lang.OutOfMemoryError GCOverhead限制超过错误,同时在服务器启动期间实例化30000条记录的bean。 引起原因:org.springframework.beans.BeanInstantiation异常:未能实例化[java.lang.字符

  • 在Android Studio1.5.1只是通过移动源代码从一个系统到另一个即使干净的构建是成功的,但当代码运行我得到这种错误 java.lang.OutOfMemoryError: GC开销限制超过错误:任务': app: dexDebug'执行失败。 我在应用程序中添加了以下代码。格拉德尔还:

  • 在我的jenkins工作中,我得到这个错误为我的bot用户。我的限制是5000,我看到每秒钟大约有100个请求,我不确定哪个工作/服务正在使用机器人的请求。理想情况下,我的其他jenkins工作应该每分钟最多占用1个请求。 有没有办法找出是什么导致了如此高的请求率?或者任何API调用来列出在最后一分钟内进行的所有API调用或类似的东西?