/*
å 为工ä½ä¸ä¸ä¸ªå¥æªçéæ±ï¼è¦ç¨SQLè¯è¨è®¡ç®ä¸¤ä¸ªæ¥æé´æå¤å°ä¸ªå·¥ä½æ¥ã
设å®æ¯ä¸ä¸ªæææ5个工ä½æ¥ï¼ä»ææä¸å°ææäº
说æï¼
第ä¸ä¸ªææçå·¥ä½æ¥æ°ï¼DATEPART(dw, @begdt)-DATEPART(dw, @begdt)ï¼æå°0天
æ«ä¸ä¸ªææçå·¥ä½æ¥æ°ï¼DATEPART(dw, @enddt)ï¼æå¤5天
计ç®æ¹æ³ï¼
å¦æ两个æ¥æå¤å¨åä¸ä¸ªææå
ï¼ç´æ¥è®¡ç®â第ä¸ä¸ªææçå·¥ä½æ¥æ°â
å¦åæä¸é¢çå
¬å¼è®¡ç®
(两个æ¥æé´çæ»å¤©æ° - 第ä¸ä¸ªææçå¤©æ° - æ«ä¸ä¸ªææç天æ°) / 7 * 5
+ 第ä¸ä¸ªææçå·¥ä½æ¥æ°
+ æ«ä¸ä¸ªææçå·¥ä½æ¥æ°
*/
--计ç®å¹¶è¿å两个æ¥æé´çå·¥ä½å°æ¶æ°ï¼å·¥ä½æ¥*8ï¼æå¨ä¸å°å¨äºè®¡ç®
--å¿
é¡»å
SET DATEFIRST 1
CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME)
RETURNS INTEGER
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
RETURN @hours
END
温馨提示:答案为网友推荐,仅供参考