sql中统计办理时长时去除中午和晚上休息时间的语句怎么写
时间: 2024-12-16 10:22:47 浏览: 4
在SQL中,要计算办理业务的时间时排除中午和晚上的休息时间,这通常涉及到日期时间处理和条件过滤。假设我们有一个名为`transactions`的表,其中包含`start_time`和`end_time`字段记录了每个交易开始和结束的时间,我们可以使用以下方法:
```sql
WITH work_hours AS (
SELECT
start_time,
end_time,
CASE
WHEN EXTRACT(HOUR FROM (end_time - start_time)) BETWEEN 12 AND 13 THEN
start_time + INTERVAL '13:00' HOUR MINUTE -- 推算下一个工作小时开始时间
WHEN EXTRACT(HOUR FROM (end_time - start_time)) BETWEEN 17 AND 18 THEN
start_time + INTERVAL '19:00' HOUR MINUTE -- 推算下一个工作小时开始时间
ELSE
end_time
END AS adjusted_end_time
FROM transactions
)
SELECT
start_time,
MIN(adjusted_end_time) - start_time AS processing_duration
FROM
work_hours
GROUP BY
start_time;
```
这个查询首先创建了一个名为`work_hours`的公共表表达式(CTE),它检查每笔交易的持续时间是否在休息时间内,并将结束时间调整到下一个工作小时。然后,从这个CTE中选择实际的工作时长。
阅读全文