AI生成结果
为了编写一个SQL Server查询来计算出基于给定规则扣减后的时长,我们需要先理解规则并将其应用于数据。根据提供的Excel表格,我们有以下规则:
- 如果起止时间都在12:00之前,工时减去00:05。
- 如果开始时间在12:00之前且结束时间在17:00或更早,工时减去01:05。
- 如果开始时间在12:00之后且结束时间在17:00之后,工时减去00:10。
- 如果开始时间在12:00之后且结束时间在17:00或之前,工时不变。
- 如果开始时间在12:00之前且结束时间在17:00之后,工时减去01:15。
假设我们有一个表WorkingHours
,其结构如下:
CREATE TABLE WorkingHours (
id INT IDENTITY(1,1) PRIMARY KEY,
startTime TIME,
endTime TIME,
actualDuration TIME
);
我们可以使用CASE语句来实现这些规则,并编写一个查询来计算扣减后的时长:
SELECT
id,
startTime,
endTime,
actualDuration,
CASE
WHEN startTime < '12:00' AND endTime < '12:00' THEN
DATEADD(MINUTE, -5, actualDuration)
WHEN startTime < '12:00' AND endTime <= '17:00' THEN
DATEADD(MINUTE, -65, actualDuration)
WHEN startTime > '12:00' AND endTime > '17:00' THEN
DATEADD(MINUTE, -10, actualDuration)
WHEN startTime > '12:00' AND endTime <= '17:00' THEN
actualDuration
WHEN startTime < '12:00' AND endTime > '17:00' THEN
DATEADD(MINUTE, -75, actualDuration)
END AS adjustedDuration
FROM WorkingHours;
这个查询将根据上述规则调整每个记录的实际工作时长。请注意,DATEADD
函数用于从实际时长中减去分钟数,以得到调整后的时长。你需要确保你的数据库中的actualDuration
字段可以存储TIME
类型的数据,如果它存储的是字符串或其他格式,则需要进行相应的转换。
好的,我将为您生成5条示例数据,并应用上述SQL查询来计算扣减后的时长。首先,我们需要插入一些示例数据到WorkingHours
表中。
以下是示例数据的插入语句:
INSERT INTO WorkingHours (startTime, endTime, actualDuration)
VALUES
('00:20', '11:20', '11:00'),
('00:05', '16:00', '15:55'),
('13:00', '18:00', '05:00'),
('12:20', '16:50', '04:30'),
('11:10', '17:30', '06:20');
接着,我们使用之前提到的SQL查询来计算扣减后的时长:
SELECT
id,
startTime,
endTime,
actualDuration,
CASE
WHEN startTime < '12:00' AND endTime < '12:00' THEN
DATEADD(MINUTE, -5, actualDuration)
WHEN startTime < '12:00' AND endTime <= '17:00' THEN
DATEADD(MINUTE, -65, actualDuration)
WHEN startTime > '12:00' AND endTime > '17:00' THEN
DATEADD(MINUTE, -10, actualDuration)
WHEN startTime > '12:00' AND endTime <= '17:00' THEN
actualDuration
WHEN startTime < '12:00' AND endTime > '17:00' THEN
DATEADD(MINUTE, -75, actualDuration)
END AS adjustedDuration
FROM WorkingHours;
根据所提供的数据和规则,这5条记录的扣减结果如下:
00:20
到11:20
:起止时间都在12:00之前,工时减去00:05,所以调整后的时间为10:55
。00:05
到16:00
:开始时间在12:00之前且结束时间在17:00或更早,工时减去01:05,所以调整后的时间为14:50
。13:00
到18:00
:开始时间在12:00之后且结束时间在17:00之后,工时减去00:10,所以调整后的时间为04:50
。12:20
到16:50
:开始时间在12:00之后且结束时间在17:00或之前,工时不变,所以调整后的时间为04:30
。11:10
到17:30
:开始时间在12:00之前且结束时间在17:00之后,工时减去01:15,所以调整后的时间为05:05
。
注意:在SQL Server中,DATEADD
函数通常用来增加时间值,但是在这个上下文中,我们用它来减少时间。例如,DATEADD(MINUTE, -5, '11:00')
会从11:00
中减去5分钟。如果你在执行此查询时遇到任何问题,请确保你的数据库支持这种操作,并且字段类型是兼容的。
20240908211947274-工时计算.xlsx
xlsx文件
9.6K
请登录后查看回复内容