[SCRIPT] – Creare una condizione di data utilizzando la funzione DATENAME

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

 

 

 

Chi Sono

Bruno Bragatto è laureato in Automazione Industriale nell’IFSP (San Paolo – Brasile), con specializzazione in Database nella FIAP (San Paolo – Brasile) e è certificato Oracle Database 11g Administrator Certified Associate e Microsoft MCSA – SQL 2016 Database Administration.

OCA - Oracle 11g Database Administrator