Funkce pro návrat ke specifickému dni měsíce
To bylo užitečné pro náš plán údržby, protože můžeme použít jeden skript a přidat kód, který se bude spouštět v určitý den (jako poslední neděle nebo 1.denní den), také jsem ho použil pro prognózu doby, Našich serverů.
Funkce vyžaduje pouze tři vstupy, Měsíc, o který máte zájem, typ a číslo.
Používá podobné informace, jaké používá společnost Microsoft pro měsíční pracovní rozvrhy.
SQL
ALTER FUNCTION FirstDay(@Month DATETIME,@Type INT, @Counter INT) RETURNS DATETIME
AS BEGIN
SET @Month = CONVERT(DATE,DATEADD(DAY,1-DATEPART(DAY,@Month),@Month))
DECLARE @CurDate DATETIME=@Month,@Date DATETIME,@Matches INT=0,@TempDate DATETIME
WHILE @CurDate<DATEADD(MONTH,1,@Month) AND @Date IS NULL BEGIN
IF (SELECT (CASE @Type WHEN 1 THEN (CASE WHEN DATEPART(WeekDay,@CurDate)=1 THEN 1 ELSE 0 END)
WHEN 2 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=2 THEN 1 ELSE 0 END)
WHEN 3 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=3 THEN 1 ELSE 0 END)
WHEN 4 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=4 THEN 1 ELSE 0 END)
WHEN 5 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=5 THEN 1 ELSE 0 END)
WHEN 6 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=6 THEN 1 ELSE 0 END)
WHEN 7 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=7 THEN 1 ELSE 0 END)
WHEN 8 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,2,3,4,5,6,7) THEN 1 ELSE 0 END)
WHEN 9 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (2,3,4,5,6) THEN 1 ELSE 0 END)
WHEN 10 THEN (CASEWHEN DATEPART(WeekDay,@CurDate) IN (1,7) THEN 1 ELSE 0 END)
ELSE 0 END))=1 BEGIN
SET @Matches = @Matches+1
SET @TempDate = @CurDate
END
IF @Matches=@Counter AND @Counter<32 BEGIN
SET @Date=@TempDate
END
SET @CurDate=DATEADD(DAY,1,@CurDate)
END
RETURN ISNULL(@Date,@TempDate)
END
GO
Pro typ @. 1 = neděle, 2 = pondělí, 3 = úterý, 4 = středa, 5 = čtvrtek, 6 = pátek, 7 = sobota
Pro @Counter, 1 = 1st, 2 = 2nd, 3 = 3rd, 4 = 4th etc ..., 32 = Last (tyto jsou mírně odlišné)
Následující kroky jsou následující:
- Nastavte datum vstupu na první den v měsíci
- Deklarujte proměnné pro naši smyčku přes měsíc
- Proveďte smyčku po každém datu a aktualizujte pořadí shody, pokud existuje shoda, a aktualizujte dočasný datum pro uložení poslední shody
- Pokud jsou zápasy rovny našemu pultu a počitadlo je menší než 5 (5 = poslední den), pak nastavíme datum návratu jako datum temp, a pak opustíme smyčku, protože datum již není nulové.
- Přidejte jeden do našeho aktuálního data a znovu proveďte kontrolu.
- Vrátit datum, nebo pokud je nulový termín, který byl náš poslední zápas.
Níže je uveden příklad použití, kde lze přidat například naše plány údržby . Toto bude probíhat v poslední neděli každého měsíce.
SQL
--Run your code here...
END