首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求1個查詢sql,兩時間相差排除星期六

2012-09-23 
求一個查詢sql,兩時間相差排除星期六因為要統計准時率,所以要一個查詢,開始時間date1完成時間date2date1距

求一個查詢sql,兩時間相差排除星期六
因為要統計准時率,所以要一個查詢,
開始時間date1
完成時間date2
date1距date2小於等於3天為准時,排除周六,就是說如果碰上周六可以寬限為4天。
 sql怎麼寫?主要不知怎麼排除周六,然後效率高點更好了,謝謝

[解决办法]

SQL code
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 行受影响)*/
[解决办法]
SQL code
/**********************************************************************************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
[解决办法]
SQL code
select (case when date2-date1>4 then 0 else when datename(dw,date1) <3 then 0 else then 1) as Complete from tb
[解决办法]
这个是需要写函数来判断时间在所在区间内且是不是星期六
[解决办法]
楼主需求不太明确,猜测如下:
SQL code
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 行受影响)*/ 

热点排行