Às vezes é necessário criar uma condição baseada em uma data específica (por exemplo, o primeiro dia do ano, o quinto dia do Mês, a segunda segunda-feira do Mês etc.).
Eu estive nessa situação algumas vezes e na maior parte dos casos a solução foi usar um scheduler ou um Job do SQL Server, ou outras ferramentas para gerenciar esses casos. Soluções validas, obviamente.
Mas e se pudéssemos, ao invés disso, utilizar um único job no qual fosse a stored procedure ou o script que cuidassem disso? Seria possível?
Essa pergunta é valida considerando que seria mais fácil para fazer a manutenção ou administrar.
A minha solução para esta pergunta foi em utilizar uma função chamada DATENAME. Obviamente eu não vou entrar no detalhe da Função, mas seria interessante estudar a documentação para se familiarizar e testar também utilizando, por exemplo, DATENAME(DW, GETDATE()).
Neste post, ao invés disso, explicarei o meu exemplo que, com sorte, poderá ser uma boa introdução para as vossas soluções com esta Function.
Declarei basicamente 4 variaveis e depois as setei como:
SET @TestDate = GETDATE() –’12/31/2022′ Faz somente um getdate ou, se podem usar uma data específica
SET @dayName = DATENAME(DW, @TestDate); –Aqui nos queremos ver o nome do dia da semana, Sunday, por exemplo.
SET @dayMonth = DATENAME (DD, @TestDate); — Aqui queremos o dia do Mês especifico, por exemplo o primeiro do Mês .
SET @dayYear = DATENAME(DY, @TestDate); — aqui queremos o dia do ano, neste caso o primeiro dia do ano.
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