Quantcast
Channel: Transact-SQL forum
Viewing all articles
Browse latest Browse all 23857

Date difference function that returns minutes between two dates and excludes weekends and holidays

$
0
0

Is there a way to get this to work as a function? 

Currently returns error "Select statements included within a function cannot return data to a client"

CREATE FUNCTION [dbo].[WorkDays](@DateFrom datetime,@DateTo datetime) 

RETURNS int
AS
BEGIN

--Working time
DECLARE @WTFrom TIME = '8:00AM';
DECLARE @WTTo TIME = '5:00PM';

DECLARE @minCount BIGINT

--Date ranges
IF (DATEDIFF(HOUR, @DateFrom, @DateTo) > 12) 
BEGIN
	WITH CTE AS
	(
		SELECT @DateFrom AS DateVal
		UNION ALL
		SELECT DATEADD(HOUR, 1, DateVal)
		FROM CTE
		WHERE DateVal < DATEADD(HOUR, -1,@DateTo)
	)
	SELECT DATEDIFF(minute, MIN(CTE.DateVal), MAX(CTE.DateVal))
	FROM CTE 
	WHERE (CAST(CTE.DateVal AS time) > @WTFrom AND CAST(CTE.DateVal AS time) < @WTTo) AND DATEPART(dw, CTE.DateVal) NOT IN (1, 7) AND NOT EXISTS (SELECT * FROM Holiday AS H WHERE H.holiday = CTE.DateVal)
	OPTION (MAXRECURSION 0);
END;
ELSE 
BEGIN
	WITH CTE AS
	(
		SELECT @DateFrom AS DateVal
		UNION ALL
		SELECT DATEADD(MINUTE, 1, DateVal)
		FROM CTE
		WHERE DateVal < DATEADD(MINUTE, -1,@DateTo)
	)
	SELECT DATEDIFF(minute, MIN(CTE.DateVal), MAX(CTE.DateVal))
	FROM CTE 
	WHERE (CAST(CTE.DateVal AS time) > @WTFrom AND CAST(CTE.DateVal AS time) < @WTTo) AND DATEPART(dw, CTE.DateVal) NOT IN (1, 7) AND NOT EXISTS (SELECT * FROM Holiday AS H WHERE H.holiday = CTE.DateVal)
	OPTION (MAXRECURSION 0);
END;
END

Thanks for your help.


Viewing all articles
Browse latest Browse all 23857

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>