日期:2014-05-17 浏览次数:20767 次
select *
from 表
where 字段 >= convert(varchar(10),GETDATE(),120)+' 19:00:00' --每天晚上19点
and 字段 <= convert(varchar(10),dateadd(day,2,getdate()),120)+' 10:00:00' --第二天10点的工作时长
select convert(varchar(10),GETDATE(),120)+' 19:00:00', --每天晚上19点
convert(varchar(10),dateadd(day,2,getdate()),120)+' 10:00:00', --第二天10点的工作时长
--时长
DATEDIFF(hour,convert(varchar(10),GETDATE(),120)+' 19:00:00',convert(varchar(10),dateadd(day,2,getdate()),120)+' 10:00:00')
DECLARE @begin DATETIME
DECLARE @end DATETIME
SET @begin='2013-12-19 08:30:00'
SET @end='2013-12-21 08:30:00'
;WITH cte AS (
SELECT * FROM TEST
WHERE 开始时刻<=@end AND 结束时刻>=@begin)
SELECT 编码,人员姓名,CASE WHEN DATEPART(HOUR,开始时刻) >=10 AND DATEDIFF(dd,开始时刻,结束时刻)=0 AND DATEPART(HOUR,结束时刻) <=19 THEN DATEDIFF(hh,开始时刻,结束时刻) --不跨天不加班
WHEN (DATEPART(HOUR,开始时刻) >=10 OR DATEPART(HOUR,结束时刻) >19) AND DATEDIFF(dd,开始时刻,结束时刻)=0 THEN ABS(19-DATEPART(HOUR,开始时刻)) END [10:00-19:00 的工作时长],--不跨天加班
case WHEN DATEPART(HOUR,开始时刻) >=19 AND DATEDIFF(dd,开始时刻,结束时刻)>0 AND DATEPART(HOUR,结束时刻)<=10 THEN 24-DATEPART(HOUR,开始时刻)+DATEPART(HOUR,结束时刻) --跨天不加班
WHEN dATEPART(HOUR,结束时刻) >10 AND DATEDIFF(dd,开始时刻,结束时刻)>0 AND DATEPART(HOUR,开始时刻) <=19 THEN 24-DATEPART(HOUR,开始时刻)+DATEPART(HOUR,结束时刻) END [19:00-第二天10:00的工作时长]
FROM cte