A volte è necessario creare condizioni basate in date specifiche (ex. Primo del anno, il quinto del mese, il secondo Lunedì del mese etc… ) .
Mi sono trovato in tante situazioni come questa e tante volte la soluzione era utilizzare uno schedulatore, un Job SQL oppure tanti altri strumenti per fare questo. E ci sta! Sono validi, ovviamente.
Ma e se potessimo creare un unico job in cui sarà la stored procedure richiamata a gestire questo internamente? Sarebbe possibile?
Questa è una domanda valida visto che da un punto di vista di amministrazione e manutenzione sarebbe più comodo di farne.
La mia soluzione per questa domanda è stata di utilizzare la funzione DATENAME. Ovviamente non voglio entrare troppo nel dettaglio, ma sarebbe interessante darci un’occhiata nella documentazione in modo da familiarizzarsi. Provate anche utilizzando DATENAME(DW, GETDATE()) per esempio e guardate i risultati diversi. Vi sarà molto utile!
In questo post, invece, vi spiegherò il mio esempio e fortunatamente questo potrebbe essere già una bella introduzione per una vostra soluzione con questa Function.
Sono state dichiarate quattro variabili: @dayMonth come Varchar(4), @dayName come Varchar(10), @dayYear come Varchar(4) and @TestDate come datetime.
Poi ne ho settate come:
SET @TestDate = GETDATE() –’12/31/2022′ Fa soltanto GetDate oppure se volete testare con una data specifica.
SET @dayName = DATENAME(DW, @TestDate); –Vogliamo vedere qui il nome del giorno, come per esempio, Sunday (Domenica)
SET @dayMonth = DATENAME (DD, @TestDate); — Qui invece vogliamo vedere il giorno del mese, come per esempio, il primo di ogni mese.
SET @dayYear = DATENAME(DY, @TestDate); — Qui vogliamo prendere il primo giorno del anno, per esempio.
DECLARE @dayMonth VARCHAR(4) DECLARE @dayName VARCHAR(10); DECLARE @dayYear VARCHAR(4); DECLARE @TestDate datetime --VARCHAR (24) SET @TestDate = GETDATE() --'12/31/2022' --GETDATE() SET @dayName = DATENAME(DW, @TestDate); SET @dayMonth = DATENAME (DD, @TestDate); SET @dayYear = DATENAME(DY, @TestDate); /* SET @dayName = DATENAME(DW, GETDATE()); SET @dayMonth = DATENAME (DD, GETDATE()); SET @dayYear = DATENAME(DY, GETDATE()); */ IF @dayYear = 1 BEGIN PRINT 'ANNUALE' PRINT @TestDate PRINT @dayName PRINT @dayMonth PRINT @dayYear END IF @dayMonth=1 and @dayYear<>1 BEGIN PRINT 'MENSILE' PRINT @TestDate PRINT @dayName PRINT @dayMonth PRINT @dayYear END IF @dayName='Sunday' and @dayMonth<>1 BEGIN PRINT 'SETTIMANALE' PRINT GETDATE() PRINT @TestDate PRINT @dayName PRINT @dayMonth PRINT @dayYear END IF @dayName<>'Sunday' and @dayMonth<>1 BEGIN PRINT 'QUOTIDIANO' PRINT @TestDate PRINT @dayName PRINT @dayMonth PRINT @dayYear END