IF UDF.
, , @FinalMinutes IF, .
:
CREATE FUNCTION [dbo].[udf_TEST]
(
@StartDate DATETIME,
@EndDate DATETIME
)
RETURNS VARCHAR(MAX)
BEGIN
DECLARE @FinalMinutes AS DECIMAL
IF (CONVERT(VARCHAR(13), @StartDate, 114) > CONVERT(VARCHAR(13), @EndDate, 114))
BEGIN
DECLARE @NonWorkTime1 INT
SET @NonWorkTime1 = 780
DECLARE @AllMins1 INT
DECLARE @MinsInDay1 DECIMAL
SET @MinsInDay1 = 1440.0
SET @AllMins1 = ((DATEDIFF(mi, @StartDate, @EndDate))
-(((DATEDIFF(wk, @StartDate, @EndDate) * 2) * 24) * 60)
-(((CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) * 24) * 60)
-(((CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) * 24) * 60))
DECLARE @MinDays1 INT
SET @MinDays1 = (@AllMins1/@MinsInDay1)
SET @FinalMinutes = (@AllMins1 - (@MinDays1 * @NonWorkTime1) - 360 - 420)
END
ELSE
BEGIN
DECLARE @NonWorkTime INT
SET @NonWorkTime = 780
DECLARE @AllMins INT
DECLARE @MinsInDay DECIMAL
SET @MinsInDay = 1440.0
SET @AllMins = ((DATEDIFF(mi, @StartDate, @EndDate))
-(((DATEDIFF(wk, @StartDate, @EndDate) * 2) * 24) * 60)
-(((CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) * 24) * 60)
-(((CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) * 24) * 60))
DECLARE @MinDays INT
SET @MinDays = (@AllMins/@MinsInDay)
SET @FinalMinutes = (@AllMins - (@MinDays * @NonWorkTime))
END
RETURN @FinalMinutes
END