sql 计算SQL中的天数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 计算SQL中的天数相关的知识,希望对你有一定的参考价值。
/****** Object: UserDefinedFunction [dbo].[CalcManfDays] Script Date: 10/15/2008 09:49:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[CalcManfDays] (@DATE_START datetime, @DATE_END datetime)
returns NUMERIC (10,2)
AS
BEGIN
DECLARE @RESULT NUMERIC (10,2) --, @SHIFTSTART as int, @SHIFTEND as int
--set @SHIFTSTART = 7
--set @SHIFTEND = 23
-- --ADJUST IF START BEFORE SHIFT
-- if datepart(hh,@DATE_START) < @SHIFTSTART
-- begin
-- set @DATE_START = dateadd(hh,((@SHIFTSTART - 1) - datepart(hh,@DATE_START)),@DATE_START)
-- set @DATE_START = dateadd(n,(60-datepart(n,@DATE_START)),@DATE_START)
-- end
-- --ADJUST IF START AFTER SHIFT
-- if datepart(hh,@DATE_START) > @SHIFTEND
-- begin
-- set @DATE_START = dateadd(hh,(@SHIFTSTART-datepart(hh,@DATE_START)),@DATE_START)
-- set @DATE_START = dateadd(n,-(60-datepart(n,@DATE_START)),@DATE_START)
-- set @DATE_START = dateadd(dd,1,@DATE_START)
-- end
--CALC WORKDAY BY HRS(DECIMAL)
SET @RESULT = CONVERT ( NUMERIC (10,2),datediff(hh,@DATE_START,@DATE_END) - 48 * datediff(ww,@DATE_START,@DATE_END)
+ CASE WHEN datepart(dw,@DATE_START) = 1 OR datepart(dw,@DATE_END) = 7 THEN - 24
WHEN datepart(dw,@DATE_START) = 7 OR datepart(dw,@DATE_END) = 1 THEN + 24
ELSE 0 end) / 24
--ADJUST FOR HOLIDAYS
SET @RESULT = @RESULT - (SELECT COUNT ([DATE_HOLIDAY])
FROM (SELECT [DATE_HOLIDAY]
FROM [TCM_Replica].[dbo].[tblProdControl_Schedule_Holidays_USA]
WHERE [DATE_HOLIDAY] BETWEEN CONVERT (VARCHAR(10),@DATE_START,120) AND CONVERT (VARCHAR(10),@DATE_END,120)
UNION
SELECT [DATE_HOLIDAY]
FROM [TCM_Replica].[dbo].[tblProdControl_Schedule_Holidays_MTY]
WHERE [DATE_HOLIDAY] BETWEEN CONVERT (VARCHAR(10),@DATE_START,120) AND CONVERT (VARCHAR(10),@DATE_END,120))A)
IF @RESULT < 0
BEGIN
SET @RESULT = 0
END
RETURN @RESULT
END
--CALC WORKDAY BY DAYS(INT)
--select datediff(dd,@DATE_START,@DATE_END)-2*datediff(ww,@DATE_START,@DATE_END)
-- + case when datepart(dw,@DATE_START)=1 or datepart(dw,@DATE_END)=7 then -1
-- when datepart(dw,@DATE_START)=7 or datepart(dw,@DATE_END)=1 then +1
-- else 0 end
以上是关于sql 计算SQL中的天数的主要内容,如果未能解决你的问题,请参考以下文章