我这次把问题说清楚,实际上我想在原来别人的数据库基础上实现考勤的统计.原来刷卡的字段visittime是DATETIME类型,现在的目的是想把每天的刷卡记录调出来,然后判断时间是否过了上班时间,比如如果超过08:00:00,就示为迟到,并且计算出迟到的时间数.strsql="select * from visit where convert(varchar(10),visittime,121)='2006-03-08' and DATEPART (hh,visittime)>='8'and DATEPART (mi,visittime)>'0'and DATEPART (ss,visittime)>'0'"上面的是将今天的迟到(8点为准)的记录查询出来,大家帮我想想,怎么把迟到了多少时间怎么输出来,因为这里高手很多,求大家帮我把SQL语句写出来,我实在搞不出来了.谢谢了!

解决方案 »

  1.   

    select *,datediff(mi,convert(varchar(10),visittime,121),visittime) from visit 
    where convert(varchar(10),visittime,121)='2006-03-08' and DATEPART (hh,visittime)>='8'and DATEPART (mi,visittime)>'0'and DATEPART (ss,visittime)>'0'
      

  2.   

    select datediff(ss,'2006-03-08 08:00:00',visittime) as 秒 from visit 
    where convert(varchar(10),visittime,121)='2006-03-08' and DATEPART (hh,visittime)>='8'and DATEPART (mi,visittime)>'0'and DATEPART (ss,visittime)>'0'
      

  3.   

    算出總共多少秒,不是可以得出小時分鐘秒麼?------------------
    給的信息太少,只能說說意見假定你這里的visittime為早上上班時間,如果還包括中午,晚班上班時間,我看你這句也會是有問題的,可能是缺打,漏打呢?舉個例子:早卡沒有記錄,你就會將中卡上班時間當作早卡上班時間,那這個人是遲到呢?還是漏打?或是別的什麼?假定visittime為早卡上班記錄,試試這個select *,delayss=datediff(ss,'2006-03-08 08:00:00',visittime) from visit 
    where datediff(day,'2006-03-08 08:00:00',visittime)=0 and datediff(ss,'2006-03-08 08:00:00',visittime)>0
      

  4.   

    declare @a datetime
    set @a = '2006-03-09 08:00:00'
    select floor(datediff(ss,@a,visittime)/3600) as 小时,
           floor(datediff(ss,@a,visittime) - floor(datediff(ss,@a,visittime)/3600)*3600)/60 as 分钟,
           floor(datediff(ss,@a,visittime) - floor(datediff(ss,@a,visittime)/60) * 60) as 秒
    from visit 
    where convert(varchar(10),visittime,121)='2006-03-08' and DATEPART (hh,visittime)>='8'and DATEPART (mi,visittime)>'0'and DATEPART (ss,visittime)>'0'
      

  5.   

    这个是算出迟到多长时间的
    select t=  convert(varchar(8),convert(datetime,convert(varchar(8), visittime,108)) - convert(datetime,'08:00:00'),108)这个是判断是否迟到的
    where convert(varchar(8), getdate(),108)>'08:00:00'select
     *, 
     [迟到多长时间]=convert(varchar(8),convert(datetime,convert(varchar(8), getdate(),108)) - convert(datetime,'08:00:00'),108)
    from visit 
    where convert(varchar(10),visittime,121)='2006-03-08' 
          and convert(varchar(8), visittime,108)>'08:00:00'