【问题标题】:Sum Time SQlite PHP over 24HrsSum Time SQlite PHP 超过 24 小时
【发布时间】:2018-09-30 18:32:00
【问题描述】:

我有一个需要总结的时间列表。我有两张表:workers 和 schedule。

CREATE TABLE schedule (
    id,
    worker_id,
    date,
    start_time,
    end_time,
    hours

SELECT w.name, w.salary, time(sum(strftime('%s', hours) - strftime('%s', '00:00:00')), 'unixepoch') AS total_hours
FROM workers w
JOIN schedule s ON s.worker_id = w.id
  WHERE  date between '2018-09-17' AND '2018-09-21'
GROUP BY w.name

小时数列包含每天工作的总小时数。我找到了一些其他帖子,但不是我需要的解决方案。

  1. sqlite: how to add total time hh:mm:ss where column datatype is DATETIME?
  2. sqlite: sum time over 24h to HHH:MM:SS

问题

图片时间表 如果我将 24Hrs 下的值相加,则此请求可以正常工作:例如 10:00 + 07:00,总数将为:17:00,但如果我将更多时间相加:10:00 + 07:00 + 09:00 我将得到: 02:00.
我不知道我做错了什么。

我正在寻找的结果:

Worker   | Salary | Total Hours
John Doe | $28.00 | 26:00
worker 1 | $30.00 | 20:15
worker 2 | $25.00 | 42:30

【问题讨论】:

    标签: php sql sqlite


    【解决方案1】:

    只需将值表示为十进制小时数,因此 10:30 将被表示为 10.5:

    SELECT w.name, w.salary,
           sum(strftime('%s', hours) - strftime('%s', '00:00:00')) / (60.0 * 60) as decimal_hours
    FROM workers w JOIN
         schedule s
         ON s.worker_id = w.id
    WHERE  date between '2018-09-17' AND '2018-09-21'
    GROUP BY w.name;
    

    如果您真的非常需要,您可以将其格式化回 HH:MM 形式的字符串。不过,我建议您将其保留为十进制小时或分钟。

    【讨论】:

    • 感谢您的回答,但这并没有添加分钟示例:8:30 + 9:22 = 17h。应该是 17:52 小时
    • @Vargas 。 . .这产生的不是分钟,而是十进制小时。所以那将是 17.867。
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多