USE [PERS2] GO /****** Object: UserDefinedFunction [dbo].[mfnc_GetShift] Script Date: 07/03/2014 15:18:11 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: M. Jordaan -- Create date: 10-05-2014 -- Description: Vergelijk shift van huidige systeem tijd met tijd inparameter. -- Indien beide shifts overeen komen wordt shift (1, 2 0f 3) teruggegeven, -- anders wordt shift 0 geretourneerd. -- shift 1 = 23:00 uur - 07:00 uur (shift met dag overgang) -- shift 2 = 07:00 uur - 15:00 uur -- shift 3 = 15:00 uur - 23:00 uur -- ============================================= ALTER FUNCTION [dbo].[mfnc_GetShift] ( -- parameter is de tijd van blokdata @Blok_DateTime datetime ) RETURNS int AS BEGIN DECLARE @ShiftDate DATETIME DECLARE @ActueelDate DATETIME DECLARE @shift int DECLARE @shiftblok int -- lees actuele datum/tijd in en bewaar deze voor hergebruik SET @ActueelDate = GETDATE() -- Bepaal shift voor blok dag/tijd, start met actuele dag 12 uur 's nachts SET @ShiftDate = DATEDIFF(DD, 0, @ActueelDate) SET @shiftblok = 0 SET @ShiftDate = DATEADD(mi , -70, @ShiftDate) IF (@Blok_DateTime >= @ShiftDate) SET @shiftblok = 1 SET @ShiftDate = DATEADD(hh , +8, @ShiftDate) IF (@Blok_DateTime > @ShiftDate) SET @shiftblok = 2 SET @ShiftDate = DATEADD(hh , +8, @ShiftDate) IF (@Blok_DateTime > @ShiftDate) SET @shiftblok = 3 SET @ShiftDate = DATEADD(hh , +8, @ShiftDate) IF (@Blok_DateTime > @ShiftDate) SET @shiftblok = 1 -- 3-7-2014 EW/SN -- SET @ShiftDate = DATEADD(hh , +1, @ShiftDate) -- IF (@Blok_DateTime > @ShiftDate) SET @shiftblok = 0 -- Bepaal shift voor actuele dag/tijd, start met actuele dag 12 uur 's nachts SET @ShiftDate = DATEDIFF(DD, 0, @ActueelDate) SET @shift = 0 -- 3-7-2014 EW/SN -- SET @ShiftDate = DATEADD(hh , -1, @ShiftDate) SET @ShiftDate = DATEADD(mi , -70, @ShiftDate) IF (@ActueelDate > @ShiftDate) SET @shift = 1 SET @ShiftDate = DATEADD(hh , +8, @ShiftDate) IF (@ActueelDate > @ShiftDate) SET @shift = 2 SET @ShiftDate = DATEADD(hh , +8, @ShiftDate) IF (@ActueelDate > @ShiftDate) SET @shift = 3 SET @ShiftDate = DATEADD(hh , +8, @ShiftDate) IF (@ActueelDate > @ShiftDate) SET @shift = 1 -- 3-7-2014 EW/SN -- SET @ShiftDate = DATEADD(hh , +1, @ShiftDate) -- IF (@ActueelDate > @ShiftDate) SET @shift = 0 -- vergelijk shift van blok en actuele tijd IF (@shift <> @shiftblok) BEGIN DECLARE @shiftdiff INT; --bepaal verschil tussen blok datumetijd en actuele tijd in minuten SET @shiftdiff = DATEDIFF(mi, @Blok_DateTime, @ActueelDate); --Een verschil van 5 minuten wordt als gelijke shift geaccepteerd -- 3-7-2014 EW/SN -- IF (@shiftdiff >= -5) AND (@shiftdiff <= 5) IF (@shiftdiff > 10) SET @shift = 0; END -- geef het shift nummer terug, bij nul valt blok buiten huidig eshift RETURN (SELECT @shift) END