如何拆分日期列&总结一下

时间:2008-10-31 11:47:46

标签: sql-server tsql

我有一个查询,其中我有一个日期列(时间),告诉“IN”&这个单一栏目的人们出席的“OUT”时间

我的疑问是: -

1)如何获得每位员工的每日出勤率 2)如何知道员工是否在场时间不到5小时

请告诉我SQL服务器中的查询。

3 个答案:

答案 0 :(得分:1)

您需要按用户对查询进行分组,然后针对特定日期对项目进行分组,然后比较最大值和最小值,例如:

declare @users table (
    UserId int, 
    DateColumn datetime
)

insert into @users values (1, '2008-10-31 15:15') 
insert into @users values (1, '2008-10-31 10:30') 
insert into @users values (1, '2008-10-30 16:15') 
insert into @users values (1, '2008-10-30 10:30') 

select
  UserID
  , cast(dt as datetime) dt
  , [in]
  , [out]
  , case when datepart(hour, [out]-[in]) >= 5 then 'yes' else 'no' end [5Hours?], 
  ,  cast(datediff(minute, [in], [out]) as float)/60 [hours] 
from (
  select
    UserID
    , convert(varchar, DateColumn, 112) dt
    , min(DateColumn) [in]
    , max(DateColumn) [out] 
  from @users 
  group by 
    UserID, convert(varchar, DateColumn, 112) 
    ) a 

答案 1 :(得分:0)

   select 
      datediff(minute, TimeFrom, TimeTo) as AttendedTimeInMinutes,
      case when datediff(minute, sTimeFrom, sTimeTo) < 5 * 60 
         then 
          'less than 5 hours' 
         else '5 hours or more' 
      end
   from YourTable

答案 2 :(得分:0)

要查找两个日期时间之间的差异,您可以使用以下内容:

SELECT Datepart(hour, dateTimeEnd - dateTimeStart)

DatePart函数返回日期时间变量的一部分,而dateTimeEnd - dateTimeStart返回两个日期之间的差异作为新的DateTime