Funkcja zwrotu określonego dnia miesiąca
Jest to użyteczne w naszym planie utrzymania, ponieważ możemy użyć jednego skryptu i dodać kod, który będzie działać w określonym dniu (np. W ostatnią niedzielę lub w pierwszą noc), ja też wykorzystałem go do prognozowania czasów, w których praca będzie działać Nasze serwery.
Funkcja wymaga tylko trzech wejść, miesiąca, który Cię interesuje, typu i numeru.
Wykorzystuje podobne informacje, które Microsoft wykorzystuje do miesięcznych harmonogramów pracy.
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
Dla @Type. 1 = niedziela, 2 = poniedziałek, 3 = wtorek, 4 = środa, 5 = czwartek, 6 = piątek, 7 = sobota
Dla @Counter, 1 = 1st, 2 = 2nd, 3 = 3rd, 4 = 4th itd ..., 32 = Ostatnie (są nieco inne)
Poniższe kroki są następujące:
- Ustaw datę wprowadzania danych na pierwszy dzień miesiąca
- Deklaracja zmiennych dla naszej pętli przez miesiąc
- Zapętl każdą datę i zaktualizuj liczbę meczów, jeśli jest mecz, i zaktualizuj tymczasową datę, aby utrzymać ostatni mecz
- Jeśli mecze odpowiadają liczbie, a licznik jest mniejszy niż 5 (5 = ostatni dzień), a następnie ustaw datę powrotu jako datę tymczasową, zostanie ona zamknięta, ponieważ data nie jest już pusta.
- Dodaj jeden do naszej aktualnej daty i sprawdź nasz czek ponownie.
- Zwróć datę, lub jeśli null datę ostatniego meczu.
Poniżej znajduje się przykład w użyciu, gdzie można dodać przykładowe plany konserwacyjne . To nastąpi w ostatnią niedzielę każdego miesiąca.
SQL
--Run your code here...
END