MariaDB中如何通过SEC_TO_TIME对两个时间秒数求和?
解决两个跨表秒数求和并转换为y/m/d hh:mm:ss格式的问题
你之前的问题在于两个求和操作是分开执行的独立查询,无法直接在另一个查询中引用这两个结果进行计算。必须将两个表的求和结果放到同一个查询上下文里,才能完成相加和格式转换。
以下是两种可行的实现方式:
方式1:使用子查询获取总秒数
SELECT DATE_FORMAT( DATE_ADD('0000-00-00', INTERVAL total_seconds SECOND), '%Y/%m/%d %H:%i:%s' ) AS staffTimeTotal FROM ( -- 计算两个表的秒数总和 SELECT (SELECT SUM(tiStaffTimeBo) FROM table1) + (SELECT SUM(tiStaffTime) FROM table2) AS total_seconds ) AS total_calculation;
方式2:使用交叉连接合并两个求和结果
SELECT DATE_FORMAT( DATE_ADD('0000-00-00', INTERVAL (t1.sum_bo + t2.sum_staff) SECOND), '%Y/%m/%d %H:%i:%s' ) AS staffTimeTotal FROM (SELECT SUM(tiStaffTimeBo) AS sum_bo FROM table1) t1, (SELECT SUM(tiStaffTime) AS sum_staff FROM table2) t2;
补充说明:
DATE_ADD('0000-00-00', INTERVAL 总秒数 SECOND)会自动处理天数、月份甚至年份的进位,直接输出标准的日期时间格式。- 如果你的需求是显示总天数而非年份(比如把100000秒显示为
1/01/01 03:46:40),可以改用拼接方式:
SELECT CONCAT( FLOOR(total_seconds / 86400), '/', -- 计算总天数 DATE_FORMAT(SEC_TO_TIME(total_seconds % 86400), '%m/%d %H:%i:%s') ) AS staffTimeTotal FROM ( SELECT (SELECT SUM(tiStaffTimeBo) FROM table1) + (SELECT SUM(tiStaffTime) FROM table2) AS total_seconds ) AS total_calculation;
内容的提问来源于stack exchange,提问作者Marcello D'Ambrosio
相关产品推荐
相关产品推荐

