根據時間段,返回時間段的工作小時數

2021-04-18 12:23:48 字數 2506 閱讀 7727

/*  根據時間段,返回時間段的工作小時數:一天按8小時 */

create function [dbo].[fc_getworkhour] (@startdate **alldatetime,@enddate **alldatetime)

returns int as 

begin  

declare @delayday int   --暫用工時(日)  

if(@startdate is null)   

return 0  

if(@enddate is null)   

return 0  

declare  @tmptb table(dt **alldatetime)   

declare @weekendnum int   

declare @s **alldatetime    

set @s=@startdate   

while @s<=convert(varchar(4),year(@enddate))+'-'+convert(varchar(2),month(@enddate))+'-'+convert(varchar(2),day(@enddate))+' 23:59'   

begin        

insert into @tmptb select @s set @s=dateadd(day,1,@s)   

end     --時間段內工作日個數   

select @weekendnum=count(*) from @tmptb where datepart(weekday,dt)  not in (1,7)--工作個數(星期日為1,星期一為2,星期二為3....)   

--開頭,結尾是否是工作日,如果是的話,就除去  

if(datepart(dw,@startdate)>1 and datepart(dw,@startdate)<7)  

begin    

set @weekendnum=@weekendnum-1   

end   

if(datepart(dw,@enddate)>1 and datepart(dw,@enddate)<7)  

begin    

set @weekendnum=@weekendnum-1   

end   

--計算整工作日小時數   

set @delayday= 8*@weekendnum*60  

if(@delayday<0)  

begin    

set @delayday=0   

end        

if( datediff(dd,@startdate,@enddate)=0)--開始結束同一天   

begin    

set @delayday=datediff(mi,@startdate,@enddate)   

end     

else   

begin    

if(datepart(dw,@startdate)>1 and datepart(dw,@startdate)<7)   

begin    

if(datediff(mi,@startdate,convert(varchar(4),year(@startdate))+'-'+convert(varchar(2),month(@startdate))+'-'+convert(varchar(2),day(@startdate))+' 17:30')>0)      

begin            

set @delayday=@delayday+datediff(mi,@startdate,convert(varchar(4),year(@startdate))+'-'+convert(varchar(2),month(@startdate))+'-'+convert(varchar(2),day(@startdate))+' 17:30')    

end    

end    

if(datepart(dw,@enddate)>1 and datepart(dw,@enddate)<7)   

begin     

if(datediff(mi,convert(varchar(4),year(@enddate))+'-'+convert(varchar(2),month(@enddate))+'-'+convert(varchar(2),day(@enddate))+' 08:30',@enddate)>0)    

begin           

set @delayday=@delayday+datediff(mi,convert(varchar(4),year(@enddate))+'-'+convert(varchar(2),month(@enddate))+'-'+convert(varchar(2),day(@enddate))+' 08:30',@enddate)     

end    

end   

end  

return @delayday     end

根據時間段查詢資料

開發工具與關鍵技術 mvc 在我們做專案的時候,我們有時需要查詢一部分的資料,由於可能在 中的資料有成千上萬條資料,我們不可能一一的根據單條資料去查詢。在這個時候我們可以根據一段時間段去查詢資料。先說說這種做法的邏輯。我們在資料庫那邊在我們需要操作的表中必須要有乙個時間的字段。然後我們在專案中獲取乙...

時間段函式

在sql server中,操作select查詢時,將時間型別的字段作為搜尋條件,如果稍微不注意,也許沒有辦法查詢到意想的結果。條件不能用等於,而是時間段。如某一天,應該是從00 00 00至23 59 59之間,方可查詢出結果出來。因此,為了開發方便,寫了乙個函式 setansi nulls ong...

根據時間段查詢的sql語句

實體類屬性 datetimeformat pattern yyyy mm dd hh mm ss apimodelproperty value 起始時間 private localdatetime starttime datetimeformat pattern yyyy mm dd hh mm s...