工时计算AI生成结果-综合交流区论坛-低代码平台-本牛千智|专注WorkFine

工时计算AI生成结果

AI生成结果

为了编写一个SQL Server查询来计算出基于给定规则扣减后的时长,我们需要先理解规则并将其应用于数据。根据提供的Excel表格,我们有以下规则:

  1. 如果起止时间都在12:00之前,工时减去00:05。
  2. 如果开始时间在12:00之前且结束时间在17:00或更早,工时减去01:05。
  3. 如果开始时间在12:00之后且结束时间在17:00之后,工时减去00:10。
  4. 如果开始时间在12:00之后且结束时间在17:00或之前,工时不变。
  5. 如果开始时间在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条记录的扣减结果如下:

  1. 00:2011:20:起止时间都在12:00之前,工时减去00:05,所以调整后的时间为10:55
  2. 00:0516:00:开始时间在12:00之前且结束时间在17:00或更早,工时减去01:05,所以调整后的时间为14:50
  3. 13:0018:00:开始时间在12:00之后且结束时间在17:00之后,工时减去00:10,所以调整后的时间为04:50
  4. 12:2016:50:开始时间在12:00之后且结束时间在17:00或之前,工时不变,所以调整后的时间为04:30
  5. 11:1017: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

相关文章

请登录后发表评论

    请登录后查看回复内容