当前位置:  数据库>sqlserver

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

    来源: 互联网  发布时间:2014-10-13

    本文导语:  例:公司员工采取三个轮班制度:凌晨0:00到早上8:00为第一班,早上8:00到下午4:00为第二班,下午4:00到晚上12:00为第三班。 员工使用电子时钟进行签名,这种电子签名可以自动将记录添加到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

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 4个月可否学会java?
  • 七天学会NodeJS
  • 急需楚广明的24小时学会LINUX视频教程
  • 一个IBM AIX运维人员需要学会什么东西?谢谢
  • 十天学会写EJB,可行性为:......????请各位发表意见?
  • 请问大家用什么开发java程序,我基本上学会了java语法,不知用什么来开发它?
  • 高兴,这儿真是高手如云,仅仅一天,就让我学会简单安装redhat!
  • 我想用JAVA开发B/S结构的程序,我该学会那些东西呢,谢谢!
  • 请问各位如果c++还比较熟的话,学会java是多长时间?一个星期?一个月内?
  • 我才学java 请问怎样才能快速学会java 一个月够不够?(这是我的最多得分了,下次一定多给)
  • 三个月能学会JAVA吗?不要求融会贯通,可不可以开发程序?
  • Android开发笔记之:一分钟学会使用Logcat调试程序的详解
  • 轻轻松松学会在Oracle中实现时间相加处理
  • <<21天学会java>>上的问题。关于流
  • [图文]三分钟学会Sql Server的复制功能
  • oracle10g FOR Linux 安装轻松学会
  • 教你学会修改Oracle数据库表的大小
  • 终于学会了Oracle数据库中的Copy命令
  • 六分钟学会创建Oracle表空间的实现步骤
  • 学会sql数据库关系图(Petshop)




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3