/*因為工作中乙個奇怪的需求,要用sql語言計算兩個日期間有多少個工作日。
設定是乙個星期有5個工作日,從星期一到星期五
說明:第乙個星期的工作日數:datepart(dw, @begdt)-datepart(dw, @begdt),最少0天
末乙個星期的工作日數:datepart(dw, @enddt),最多5天
計算方法:
如果兩個日期處在同乙個星期內,直接計算「第乙個星期的工作日數」
否則按下面的公式計算
(兩個日期間的總天數 - 第乙個星期的天數 - 末乙個星期的天數) / 7 * 5
+ 第乙個星期的工作日數
+ 末乙個星期的工作日數
*/--計算並返回兩個日期間的工作小時數(工作日*8)按周一到周五計算
--必須先set datefirst 1
alter function dbo.calcworkhours(@bdate datetime, @edate datetime)
returns integer
/*因為工作中乙個奇怪的需求,要用sql語言計算兩個日期間有多少個工作日。
設定是乙個星期有5個工作日,從星期一到星期五
說明:第乙個星期的工作日數:datepart(dw, @begdt)-datepart(dw, @begdt),最少0天
末乙個星期的工作日數:datepart(dw, @enddt),最多5天
計算方法:
如果兩個日期處在同乙個星期內,直接計算「第乙個星期的工作日數」
否則按下面的公式計算
(兩個日期間的總天數 - 第乙個星期的天數 - 末乙個星期的天數) / 7 * 5
+ 第乙個星期的工作日數
+ 末乙個星期的工作日數
計算方法補充:
首先按照正常計算出除週末的工作日
-減去周一到周五休假
+加上週末上班(如果結束時間為週日)就減去1天
算頭不算尾
*/--計算並返回兩個日期間的工作小時數(工作日*8)按周一到周五計算
--必須先set datefirst 1
as begin
declare @hours integer
if @@datefirst <> 1 or @bdate > @edate
return -1
select @hours =
--如果終止日期與起始日期在同乙個星期內,只需要計算有幾天即可
case when datepart(wk, @edate-1)-datepart(wk,@bdate) = 0 then
case when datepart(dw, @bdate) > 5 then 0
when datepart(dw, @edate-1) > 5 then 6 - datepart(dw, @bdate)
else datepart(dw, @edate-1) - datepart(dw, @bdate) + 1 end
--如果終止日期與起始日期在不同的星期內
--首先計算出除前後兩個星期外完整的星期數 * 5
else (datediff(dd,@bdate,@edate)
- (8-datepart(dw, @bdate))
- datepart(dw, @edate-1)) / 7 * 5
--再加上第乙個星期裡的工作日數
+ case when datepart(dw, @bdate) < 6 then 6 - datepart(dw, @bdate)
else 0 end
--加上末乙個星期裡的工作日數
+ case when datepart(dw, @edate-1)>5 then 5 else datep
art(dw, @edate-1) end
end * 8
--減去周一到周五應上班但休息
-(select count(*)*8 from 休假日期 where 狀態='休' and 開始時間 between @bdate and @edate)
--加上周
六、週日應休息但上班,如果最後一天為週日不計算
+(select case when datepart(dw, @edate)=7 then (count(*)-1)*8 else count(*)*8 end from 休假日期 where 狀態='上' and 開始時間 between @bdate and @edate)
return @hours
endcreate function dbo.calcworkhours_temp(@bdate datetime, @edate datetime)
returns integer
/*因為工作中乙個奇怪的需求,要用sql語言計算兩個日期間有多少個工作日。
設定是乙個星期有5個工作日,從星期一到星期五說明:
第乙個星期的工作日數:datepart(dw, @begdt)-datepart(dw, @begdt),最少0天末乙個星期的工作日數:datepart(dw, @enddt),最多5天計算方法:
如果兩個日期處在同乙個星期內,直接計算「第乙個星期的工作日數」
否則按下面的公式計算
(兩個日期間的總天數 - 第乙個星期的天數 - 末乙個星期的天數) / 7 * 5
+ 第乙個星期的工作日數
+ 末乙個星期的工作日數計算並返回兩個日期間的工作小時數(工作日*8)按周一到周五計算
--必須先set datefirst 1
as begin
declare @hours integer
if @@datefirst <> 1 or @bdate > @edate
return -1
select @hours =
--如果終止日期與起始日期在同乙個星期內,只需要計算有幾天即可
case when datepart(wk, @edate-1)-datepart(wk,@bdate) = 0 then
case when datepart(dw, @bdate) > 5 then 0
when datepart(dw, @edate-1) > 5 then 6 - datepart(dw, @bdate)
else datepart(dw, @edate-1) - datepart(dw, @bdate) + 1 end
--如果終止日期與起始日期在不同的星期內
--首先計算出除前後兩個星期外完整的星期數 * 5
else (datediff(dd,@bdate,@edate)
- (8-datepart(dw, @bdate))
- datepart(dw, @edate-1)) / 7 * 5
--再加上第乙個星期裡的工作日數
+ case when datepart(dw, @bdate) < 6 then 6 - datepart(dw, @bdate)
else 0 end
--加上末乙個星期裡的工作日數
+ case when datepart(dw, @edate-1)>5 then 5 else datepart(dw, @edate-1) end
end * 8
--減去周一到周五應上班但休息
---(select count(*)*8 from 休假日期 where 狀態='休' and 開始時間 between @bdate and @edate)
--加上周
六、週日應休息但上班
--+(select count(*)*8 from 休假日期 where 狀態='上' and 開始時間 between @bdate and @edate)
return @hours
endselect *,dbo.calcworkhours(生產部送審時間,審計部審結返還時間)/8 fro
rom [2023年熱季檢修專案預算審計時間表]
select * from 休假日期
select dbo.calcworkhours_temp('2013-6-5','2013-6-9')/8
select (dbo.calcworkhours_temp('2013-6-5','2013-6-9')
-(select count(*)*8 from 休假日期 where 狀態='休' and 開始時間 between '2013-6-5' and '2013-4-8')
+(select case when datepart(dw, '2013-6-9')=7 then (count(*)-1)*8 else count(*)*8 end from 休假日期 where 狀態='上' and 開始時間 between '2013-6-5' and '2013-6-9')
)/8select case when datepart(wk, '2013-6-9')=7 then (count(*)-1)*8 else count(*)*8 end from 休假日期 where 狀態='上' and 開始時間 between '2013-6-5' and '2013-6-9'
select * from 休假日期 where 狀態='上' and 開始時間 between '2013-6-5' and '2013-6-9'
select datepart(dw, '2013-6-9表結構
/*狀態:休(周一到周五上班但放假)
上(週六到週日放假但上班)
假期名稱開始時間狀態備註清明節 4月4日休清明節 4月5日休清明節 4月7日上週日上班勞動節 4月27日上週六上班勞動節 4月28日上週日上班勞動節 4月29日休勞動節 4月30日休勞動節 5月1日休端午節 6月8日上週六上班端午節 6月9日上週日上班端午節 6月10日休端午節 6月11日休端午節 6月12日休*/
工作日總結
總結相對於師姐們來說,我們每天的工作內容尤為輕鬆。看著師姐們忙碌的身影和那響不停的 聲,真覺得我們慚愧不已。作為乙個業務資訊員來說,或許我們每天的工作方式跟一般的業務員來說有點不同。我們主要是通過 來了解船舶的動態,以至於跟進我們的業務。今天的計畫和昨天的差不多,主要是跟進小船和成品油船。可能是前兩...
病床工作日
反映醫院工作質量指標之一。指每一張床在一定時期內平均工作的日數,用以衡量病床的利用情況 平均病床工作日 天 每一病人占用病床一天,為乙個病床工作日,包括臨時加床的占用床日在內。平均病床工作日如超過期內日曆天數,說明固定開放病床數不能適應實際需要而經常增加臨時床。此指標如過低於期內日曆天數,則反映病床...
工作日寫實型別
工作日寫實根據觀察物件和目的的不同可分為五種,即個人工作日寫實 工組工作日寫實 多工具機看管工作日寫實 自我工作日寫實和特殊工作日寫實。1 個人工作日寫實 以某一作業者為物件,由觀察人員實施的工作日寫實。個人工作日寫實的目的側重於調查工時利用,確定定額時間,總結先進工作方法和經驗等。2 工組工作日寫...