mysql - 如何计算夜类和周日的额外工资

标签 mysql datetime calendar shift overlapping

我在 MySQL 中做了一个表,以日期时间类型存储工作类次的开始和结束时间。我需要从中计算出两件事(在 MySQL 中)。首先,晚上 10 点到早上 6 点之间某个类次工作了多少分钟,以及周日工作了多少分钟。周日应该优先于那些夜间时间,并且不应该将那些周日早上算两次。

提前谢谢您。

D.

顺便说一句,我尝试了这个,但没有成功:

SELECT *,
IF(DAYNAME(start)=DAYNAME(end),
    IF(TIME(start)<='6:00:00' AND TIME(end)<='6:00:00',TIME(end)-TIME(start),
        IF(TIME(start)>='22:00:00' AND TIME(end)>='22:00:00',TIME(end)-TIME(start),
            IF(TIME(start)>='6:00:00' AND TIME(end)<='22:00:00',0,
                IF(TIME(start)<='6:00:00' AND TIME(end)<='22:00:00','6:00:00'-TIME(start),
                    IF(TIME(start)>='6:00:00' AND TIME(end)>='22:00:00',TIME(end)-'22:00:00',NULL)
                    )
                )
            )
        ),
    IF(TIME(start)<='22:00:00' AND TIME(end)<='6:00:00','2:00:00'+TIME(end),
        IF(TIME(start)<='22:00' AND TIME(end)>='6:00:00','8:00:00',
            IF(TIME(start)>='22:00:00' AND TIME(end)<='6:00:00','24:00:00'-TIME(start)+TIME(end),
                IF(TIME(start)>='22:00:00' AND TIME(end)>='6:00:00','24:00:00'-TIME(start)+'6:00:00',NULL)
                )
            )
        )
    ) AS ExtraTime FROM `work`

最佳答案

工作时间:

SELECT TIMESTAMPDIFF(MINUTE, `start_time`, `end_time`) FROM ... WHERE DAYOFWEEK(`start_time`) != 1

周日工作时间:

SELECT TIMESTAMPDIFF(MINUTE, `start_time`, `end_time`) FROM ... WHERE DAYOFWEEK(`start_time`) = 1

关于mysql - 如何计算夜类和周日的额外工资,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6383350/

相关文章:

mysql - 我如何告诉 MySQL 优化器使用派生表上的索引?

java 8 ZonedDateTime 不打印 EST 当前时间。我在这里做错了什么

iphone - 如何在 iPhone 中创建网格日历?

android - 使用 SimpleDateFormat 和 UmmalquraCalendar 在阿拉伯语中显示日期名称时得到空字符串

mysql - 合并多个表的数据

php - 如何处理返回 '-0001-11-30 00:00:00' 的 MySQl 空日期

mysql - 我可以将 MysQL 时间戳与日期时间列进行比较吗?不好吗?

javascript - Javascript 中的日期函数格式

java - 如何将条目添加到 CalendarFX MonthPage?

javascript - 我有来自 2 个数据库的请求数据。如何将代码合并到一个函数中?