求一個查詢sql,兩時間相差排除星期六
因為要統計准時率,所以要一個查詢,
開始時間date1
完成時間date2
date1距date2小於等於3天為准時,排除周六,就是說如果碰上周六可以寬限為4天。
sql怎麼寫?主要不知怎麼排除周六,然後效率高點更好了,謝謝
[解决办法]
declare @date1 datetime,@date2 datetimeset @date1='2011-05-12'set @date2='2011-05-15'select 'yes' where datediff(d,@date1,@date2)<3+(case when datepart(dw,@date1)>datepart(dw,@date2) then 1 else 0 end)/*----yes(1 行受影响)*/
[解决办法]
/**********************************************************************************Program ID: FUN_GetDaysOfWeeksPurpose : 求某段时间内某一星期日期的天数Author : JesseDate : 2011.02.19**********************************************************************************/Create Function dbo.FUN_GetDaysOfWeeks( @DateS smalldatetime, @DateE smalldatetime, @WeekValue int) --星期的某一天:1-周日、2-周一...7-周六Returns int AsBegin declare @nResult int, --结果天数 @nWeekValue int, --起始日期是星期几(1-周日、2-周一...7-周六) @nDays int, --时间段内的天数 @nBeforeDays int, --起始日期到第一次相符日期的天数 @sWeekName varchar(20), --所求日期的星期名称 @tmpDate smalldatetime set @WeekValue=@WeekValue % 7 if @WeekValue=0 set @WeekValue=7 --如果起始日期大于终止日期,则对换 if @DateS>@DateE select @tmpDate=@DateE,@DateE=@DateS,@DateS=@tmpDate --取得起始日期的星期数,与设置无关(1-周日、2-周一...7-周六) select @nWeekValue=(Datepart(dw,@DateS)+(@@Datefirst %7))%7 if @nWeekValue=0 set @nWeekValue=7 set @sWeekName=DateName(dw,DateAdd(d,@WeekValue-@nWeekValue,@DateS)) if @WeekValue>=@nWeekValue set @nBeforeDays=@WeekValue-@nWeekValue else set @nBeforeDays=7-abs(@WeekValue-@nWeekValue) --取得时间段内的天数 select @nDays=Datediff(d,@DateS,@DateE)+1 if @nDays<@nBeforeDays select @nResult=0 else select @nResult=ceiling((@nDays-@nBeforeDays)/7.0) Return @nResultend /* --select @@datefirst select dbo.FUN_GetDaysOfWeeks('2011-03-01','2011-05-31',7)*/--先建一函数,再利用函数计算得出select * from t where datediff(d,date1,date2)- dbo.FUN_GetDaysOfWeeks('2011-03-01','2011-05-31',7)<=3
[解决办法]
select (case when date2-date1>4 then 0 else when datename(dw,date1) <3 then 0 else then 1) as Complete from tb
[解决办法]
这个是需要写函数来判断时间在所在区间内且是不是星期六
[解决办法]
楼主需求不太明确,猜测如下:
create table table1(date1 datetime,date2 datetime)insert into table1 select '2011-5-9','2011-5-10'insert into table1 select '2011-5-9','2011-5-15'insert into table1 select '2011-5-13','2011-5-10'insert into table1 select '2011-5-12','2011-5-15'goselect date1,date2,'满足要求' from table1 where datediff(d,date1,date2)<3+(case when datepart(dw,date1)>datepart(dw,date2) then 1 else 0 end)godrop table table1/*date1 date2 ----------------------- ----------------------- --------2011-05-09 00:00:00.000 2011-05-10 00:00:00.000 满足要求2011-05-13 00:00:00.000 2011-05-10 00:00:00.000 满足要求2011-05-12 00:00:00.000 2011-05-15 00:00:00.000 满足要求(3 行受影响)*/