sql 时间差 去掉工作时间
时间: 2023-07-20 08:22:37 浏览: 49
请问您需要计算的是两个时间之间的时间差,并且在计算时排除掉工作时间,是吗?如果是这样,您可以使用以下 SQL 语句来实现:
```sql
SELECT TIMESTAMPDIFF(SECOND, start_time, end_time) -
(DATEDIFF(end_time, start_time) - DATEDIFF(DATE_ADD(start_time, INTERVAL 1 DAY), end_time)) *
TIME_TO_SEC('08:00:00') AS time_difference
FROM your_table;
```
其中,`start_time` 和 `end_time` 分别代表两个时间点,`your_table` 是您要查询的表名。这个 SQL 语句会计算两个时间点之间的时间差,并且在计算时会排除掉工作时间,即每天的 8:00 到 17:00。
注意,这个 SQL 语句假设您的工作时间是每天从早上 8:00 开始,到下午 5:00 结束,如果您的工作时间不同,请根据实际情况修改 SQL 语句中的时间段。
相关问题
SQL 取时间差 去掉周末及非工作时间节假日
要计算时间差并排除周末及非工作时间节假日,可以使用以下步骤:
1. 使用DATEDIFF函数计算两个日期之间的天数。
2. 排除周末的天数,可以使用WEEKDAY函数,WEEKDAY返回0表示星期日,1表示星期一,以此类推。如果DATEDIFF的结果是7的倍数,则排除的天数应该为2倍的周末天数。
3. 排除非工作时间的天数,可以使用HOUR函数计算两个日期之间的小时数,并将小时数转换为天数。将所得天数从总天数中减去。
4. 排除节假日的天数,可以使用子查询或JOIN操作,将日期表与节假日表JOIN,然后排除在节假日表中出现的日期。
下面是一个示例查询,假设要计算2021年1月1日到2021年1月31日之间的工作日天数:
```
SELECT
DATEDIFF('2021-01-31', '2021-01-01') + 1 AS total_days, -- 计算总天数
SUM(CASE WHEN WEEKDAY(date) IN (5,6) THEN 2 ELSE 1 END) AS weekend_days, -- 计算周末天数
SUM(HOUR(TIMEDIFF('18:00:00', '09:00:00'))) / 24 AS off_hours_days, -- 计算非工作时间天数
(SELECT COUNT(*) FROM holiday_table WHERE date BETWEEN '2021-01-01' AND '2021-01-31') AS holiday_days -- 计算节假日天数
FROM date_table
WHERE date BETWEEN '2021-01-01' AND '2021-01-31';
```
其中,date_table是一个包含所有日期的表,holiday_table是一个包含所有节假日日期的表。查询结果将返回总天数、周末天数、非工作时间天数和节假日天数。将这些天数从总天数中减去,即可得到实际的工作日天数。
sqlserver 时间差去掉节假日
在SQL Server中计算时间差并去掉节假日,可以使用以下步骤:
1. 创建一个包含所有节假日日期的表,例如Holiday表。
2. 使用DATEDIFF函数计算开始时间和结束时间之间的小时数。
3. 使用以下语句计算开始时间和结束时间之间的工作日天数:
SELECT COUNT(*) FROM YourTable WHERE YourDate >= @StartDate AND YourDate <= @EndDate AND DATENAME(dw, YourDate) NOT IN ('Saturday', 'Sunday') AND YourDate NOT IN (SELECT HolidayDate FROM Holiday)
4. 将工作日天数乘以每个工作日的小时数,再加上开始时间和结束时间之间的非工作日小时数,即可得到最终的小时数。