I want to write a function to return datediff ignoring weekends on SQL Server. Is it allowed to pass interval as an argument on my user defined function, as following? SQL Server is saying "Invalid parameter 1 specified for datediff."
CREATE FUNCTION [dbo].[DATEDIFFWD](@interval varchar(2), @ini datetime, @end datetime)
RETURNS int
AS
BEGIN
DECLARE @output int
SET @output = DATEDIFF(@interval, @ini, @end)
IF (@interval = 'hh') SET @output = @output - (DATEDIFF(WK, @ini, @end) * 48)
IF (@interval = 'dd') SET @output = @output - (DATEDIFF(WK, @ini, @end) * 2)
RETURN @output
END
You could rewrite it as:
CREATE FUNCTION [dbo].[DATEDIFFWD](@interval varchar(2),
@ini datetime, @end datetime)
RETURNS int
AS
BEGIN
RETURN (SELECT CASE @interval
WHEN 'hh' THEN DATEDIFF(hh, @ini, @end) - ((DATEDIFF(WK, @ini, @end) * 48))
WHEN 'dd' THEN DATEDIFF(dd, @ini, @end) - ((DATEDIFF(WK, @ini, @end) * 2))
END
);
END
Please note that scalar function could be inlined starting from SQL Server 2019
db<>fiddle demo
For better performance I would use table function instead:
CREATE FUNCTION [dbo].[DATEDIFFWD](@interval varchar(2),
@ini datetime, @end datetime)
RETURNS TABLE
AS
RETURN (
SELECT CASE @interval
WHEN 'hh' THEN DATEDIFF(hh, @ini, @end) - ((DATEDIFF(WK, @ini, @end) * 48))
WHEN 'dd' THEN DATEDIFF(dd, @ini, @end) - ((DATEDIFF(WK, @ini, @end) * 2))
END AS r
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With