Funzione per il ritorno del giorno specifico del mese
Ciò è stato utile per il nostro piano di manutenzione, in quanto possiamo utilizzare uno script e aggiungere codice che verrà eseguito in un giorno specifico (come l'ultima domenica o la prima giornata di festa), l'ho anche usata per prevedere i tempi in cui saranno eseguiti i lavori I nostri server.
La funzione richiede solo tre ingressi, il mese in cui sei interessato, il tipo e il numero.
Utilizza informazioni simili come l'utilizzo di Microsoft per pianificazioni mensili di posti di lavoro.
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
Per @Type. 1 = domenica, 2 = lunedì, 3 = martedì, 4 = mercoledì, 5 = giovedì, 6 = venerdì, 7 = sabato
Per @Counter, 1 = 1, 2 = 2, 3 = 3, 4 = 4, ecc ..., 32 = Ultimo (questi sono leggermente diversi)
I passi che segue sono i seguenti;
- Imposta la data di inserimento al primo giorno del mese
- Dichiarare variabili per il nostro ciclo attraverso il mese
- Attiva ogni data e aggiorna il conteggio delle partite se c'è una partita e aggiorna una data temporanea per tenere l'ultima partita
- Se le partite corrispondono al nostro contatore e il contatore è inferiore a 5 (5 = ultimo giorno), quindi impostare la nostra data di ritorno come data temp, quindi uscire dal loop poiché la data non è più nullo.
- Aggiungete una alla nostra data corrente e effettuate nuovamente il nostro controllo.
- Restituisci la nostra data, o se null la data temp che era la nostra ultima partita.
Di seguito è riportato un esempio in uso, dove potrebbe essere aggiunto ad esempio i nostri piani di manutenzione . Questo sarà eseguito l'ultima domenica di ogni mese.
SQL
--Run your code here...
END