我开发一个考勤系统!但现在不知道如何抓取时间!考勤表 表结构为 编号 卡号 刷卡时间考勤规则为  上午班 8:00:00 到 12:00:00 下午班是 14:30:00 到 18:00:00 迟到超过5分钟算迟到,超过30算旷工,提前30分以上回家算矿工,30以内算早退
我现在不知道如何抓取上,下班的时间,不知道以那个为标准抓取,因为有可能一个人在一天中会刷很多次卡,那么我只能抓取离上下班时间最近的那个刷卡时间例如 8:00:00  首先我要抓取8:00:00前的时间,如果没有那么我就要抓取离8:00:00最近的时间,这个用sql server的存储过程如何实现!请高手们告知,谢谢!

解决方案 »

  1.   

    抓取时间:
    now();就可以了。抓取的是系统当前时间 
      

  2.   

    select min(date),max(date) from table where date like '20100715%' group by id
      

  3.   

    简单说一下思路,具体实现比较麻烦,看你能不能理解.你这个表应该做为打卡记录表,就是不管怎么样,只有有打卡了就把记录保存上.在这基础上你可以增加一考勤表,大概如下
    CardID    卡号
    Type      0=上午班; 1=下午班
    OnTime    打上班卡时间
    OffTime   打下班卡时间 
    CloseFlag 关闭标志增加一存储过程如Duty(@dutyTime datetime)每次打卡都调用次存储过程进行处理,根据打卡的时候
    和你设置的规则来判断这个打卡时间怎么来处理,例如
    需要在这里处理的情况:
    1.判端是上午班还是下午班?
    2.是上班记录还是下班记录?
    3.是否是无效打卡,忽略处理 等等...把这些都放到存储过程去处理.具体的逻辑处理可以自己在想一下,就是怎么将打卡记录
    转换为考勤记录.
      

  4.   

    請參照如下方法應該可以截取考勤時間...select CONVERT(datetime,cardtime) as cardtimeref,
    convert(char(10),cardtime,126) as cardDate,
    datename(hh,convert(datetime,cardtime))  as cardtime  
    from ea_tbl 
    where cardtime like '%2010-01-01%'
    and datename(hh,convert(datetime,cardtime))  between 1 and 23
    and cardID like '%01%'