您的位置:首页 > 教程 > SQL server > 教你轻松学会SQL Server记录轮班的技巧

教你轻松学会SQL Server记录轮班的技巧

2022-05-13 22:15:37 来源:易采站长站 作者:

教你轻松学会SQL Server记录轮班的技巧

例:公司员工采取三个轮班制度:凌晨0:00到早上8:00为第一班,早上8:00到下午4:00为第二班,下午4:00到晚上12:00为第三班。

员工使用电子时钟进行签名,这种电子签名可以自动将记录添加到SQL Server数据库中。但是,有时候,需要增加一个夜班;即使这个轮班发生在第二天,它仍然会被认为是第三班。

你也许希望根据轮班对记录进行分组,但是在你的计划中会有两个非常令人头痛的问题:
(1)不是所有的雇员都是按时到达的;
(2)有时候员工工作的时间会比他们的一个轮班的时间长一些。

为了能在你的列表中得到正确的分组,你必须假设所有的员工能在一个轮班的开始和结束时间之间的任意时间开始工作。

使用CASE语句是一种解决办法。Listing A中的SQL语句告诉我们,在创建测试表没有错误的情况下,它是如何工作的。

为了使程序代码完全准确的运行,你需要在时间的小窗口中得到每一个轮班的开始时间和下一个轮班的结束时间。在刚才的例子中,你可以用"15:59:59.123"这个值代替@StartTime,然后再重新运行代码。这时候,你必须在每一个轮班结束的分界点上增加999毫秒。

解决方案

这个例子假设轮班时间从来没有改变过,但是如果改变了轮班时间该怎么办呢?你必须仿照这个例子并根据改变了的时间写出所有的代码。

一个更好一点的主意就是,针对我们的轮班创建一个表来调用Shifts的开始时间和结束时间。在这个表中,你可以修改Case语句来查找StopTime列。

Listing B中包含了创建Shifts表并向该表中增加记录的代码。代码在一个轮班中设置了时间后,这样使代码看上去既简单又灵活:

复制代码 代码如下:
DECLARE @StartTime VARCHAR(20)
SET @StartTime ="22:59:59"
SELECTTOP 1 ShiftName FROM ShiftWork.Shifts
WHERE Shifts.StartTime <= @StartTime
ORDERBY StartTime DESC


我之所以要将轮班记录进行降www.cppcns.com序排列,是为了避免第三个轮班的边界问题。我将用一些测试案例来论证我的结论,这些内容你可以在Listing C中看到。

实际上,你可以将这个逻辑应用到TemeCards表的记录中去,而不需要创建另外的表,也就不需要在表中增加数据了。我同样使用一个简单的变量来论证我的逻辑。

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • SQL Server 2019下载与安装教程(自定义安装)

    SQL Server 2019下载与安装教程(自定义安装)

    1.SQL Server2019安装包下载 1.1进入官网 SQL Server 2019 1.2下载安装包 1点击Continue 2.填写个人信息,再点击Continue 3.点击保存文件,就代表开始下载安装包 4.下载完成后,找到安装包并以管理员
    2020-04-28
  • 详解SQL Server表和索引存储结构

    详解SQL Server表和索引存储结构

    本文详细分析了SQL Server中表和索引结构存储的原理以及对于如何加快搜索速度和提高效率等方面做了详细的分析,以下是主要内容。 下图显示了表的存储组织,每张表有一个对应的对
    2020-07-04
  • SQL UNION 操作符

    SQL UNION 操作符

    SQL UNION 操作符 SQL UNION 操作符合并两个或多个 SELECT 语句的结果。 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的每个 SELECT 语句必须拥有相同
    2020-07-04
  • SQL Server的IP不能连接问题解决

    SQL Server的IP不能连接问题解决

    自己电脑上安装的SQLServer,用了一段时间后要联网发现连接不上,花了两三个小时才搞定,在此记录下免得再遇上 刚开始时用navicat连接 使用IP连接: 要是用IP连接的需要几个步骤:
    2020-07-04
  • SQL SERVER 分组求和sql语句

    SQL SERVER 分组求和sql语句

    需求:如下图所示 实现sql语句 SELECT A1,SUM(A2*A3) FROM A GROUP BY A1 大家可以自行测试一下,主要需要了解group by语句的用法 您可能感兴趣的文章: 分组后分组合计以及总计SQL语句(稍微整理
    2020-07-04
  • SQL Server 2012 sa用户登录错误18456的解决方法

    SQL Server 2012 sa用户登录错误18456的解决方法

    最近想研究下SQL SERVER2012 Enterprise版本的数据库,听说功能很强大。我是在win7上安装的,安装的过程很顺利,我在用“Windows 身份验证”时,一切OK,但是在用SA用户登录数据库的时候出
    2020-07-04
  • SQL Server中T-SQL 数据类型转换详解

    SQL Server中T-SQL 数据类型转换详解

    常用的转换函数是 cast 和 convert,用于把表达式得出的值的类型转换成另一个数据类型,如果转换失败,该函数抛出错误,导致整个事务回滚。在SQL Server 2012版本中,新增两个容错的转
    2020-07-04
  • SQL Server数据库设置自动备份策略的完整步骤

    SQL Server数据库设置自动备份策略的完整步骤

    先了解一下:为何要做备份? 数据备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质
    2020-07-04