假如我有了2023年的日历表格,也有了每天工作事项的时间,我怎么样用mysql写出一个报表,区分我2023年工作日,周末以及法定节假日的工作时间
时间: 2023-11-06 18:04:00 浏览: 107
首先,你需要在MySQL中创建一个包含日期和时间的表格,如下所示:
```
CREATE TABLE work_schedule (
date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL
);
```
接下来,你需要插入你的日历和工作时间数据到该表格中,例如:
```
INSERT INTO work_schedule (date, start_time, end_time) VALUES
('2023-01-01', '09:00:00', '18:00:00'), -- 元旦节,休息
('2023-01-02', '09:00:00', '18:00:00'), -- 元旦节,休息
('2023-01-03', '09:00:00', '18:00:00'), -- 元旦节,休息
('2023-01-04', '09:00:00', '18:00:00'), -- 工作日,正常上班
('2023-01-05', '09:00:00', '18:00:00'), -- 工作日,正常上班
...
```
然后,你可以使用MySQL的日期函数来识别工作日、周末和法定节假日。例如,使用WEEKDAY()函数来判断日期是否为周末,使用YEAR()和MONTH()函数来判断日期是否为法定节假日。
下面是一个示例查询,它将返回2023年每天的工作时间,包括工作日、周末和法定节假日的工作时间:
```
SELECT date,
CASE
WHEN WEEKDAY(date) IN (5, 6) THEN '周末'
WHEN date IN ('2023-01-01', '2023-01-02', '2023-01-03', '2023-04-04', '2023-05-01', '2023-06-14', '2023-09-21', '2023-10-01', '2023-10-02', '2023-10-03', '2023-10-04', '2023-10-05', '2023-10-06', '2023-10-07') THEN '节假日'
ELSE '工作日'
END AS day_type,
SEC_TO_TIME(TIMESTAMPDIFF(SECOND, start_time, end_time)) AS work_time
FROM work_schedule
WHERE date BETWEEN '2023-01-01' AND '2023-12-31'
ORDER BY date;
```
该查询将输出一个报表,其中包含每天的日期、工作日类型和工作时间(以秒为单位)。你可以根据需要自定义日期和节假日列表。
阅读全文