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

BILLSSJONE 2011-05-15 01:43:51
因為要統計准時率,所以要一個查詢,
開始時間date1
完成時間date2
date1距date2小於等於3天為准時,排除周六,就是說如果碰上周六可以寬限為4天。
sql怎麼寫?主要不知怎麼排除周六,然後效率高點更好了,謝謝
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你就确定你的星期只差一个周六,不会有两个 三个 或者更多的周六

select DATEDIFF(WK,'2012-07-20','2012-08-01')
dawogui 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 billssjone 的回复:]
dawogui的可以,太謝謝了
[/Quote]
不谢.
dawogui 2011-05-15
  • 打赏
  • 举报
回复
楼主需求不太明确,猜测如下:
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'
go
select date1,date2,'满足要求' from table1
where datediff(d,date1,date2)<3+(case when datepart(dw,date1)>datepart(dw,date2) then 1 else 0 end)
go
drop 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 行受影响)

*/
BILLSSJONE 2011-05-15
  • 打赏
  • 举报
回复
dawogui的可以,太謝謝了
dawogui 2011-05-15
  • 打赏
  • 举报
回复
select count(*) from tabel where datediff(d,date1,date2)<3+(case when datepart(dw,date1)>datepart(dw,date2) then 1 else 0 end)
BILLSSJONE 2011-05-15
  • 打赏
  • 举报
回复
不是那樣的,我只要一個數字,不需要記錄,
所以可不可以改成這樣的?select count(*) from tabel where .........
--小F-- 2011-05-15
  • 打赏
  • 举报
回复
这个是需要写函数来判断时间在所在区间内且是不是星期六
BILLSSJONE 2011-05-15
  • 打赏
  • 举报
回复
我測試下,DengXingJie的是沒法測試了,因為我管不了sql server,不能把涵數寫進sql server裡,我只能在程序裡寫sql
mabailin 2011-05-15
  • 打赏
  • 举报
回复

select (case when date2-date1>4 then 0 else when datename(dw,date1) <3 then 0 else then 1) as Complete from tb
DengXingJie 2011-05-15
  • 打赏
  • 举报
回复

/*
*********************************************************************************
Program ID: FUN_GetDaysOfWeeks
Purpose : 求某段时间内某一星期日期的天数
Author : Jesse
Date : 2011.02.19
*********************************************************************************
*/

Create Function dbo.FUN_GetDaysOfWeeks( @DateS smalldatetime,
@DateE smalldatetime,
@WeekValue int) --星期的某一天:1-周日、2-周一...7-周六
Returns int
As
Begin
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 @nResult
end

/*
--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
dawogui 2011-05-15
  • 打赏
  • 举报
回复
declare @date1 datetime,@date2 datetime
set @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 行受影响)

*/

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧