[SCRIPT] – Criar uma condição de data usando a Funçao DATENAME

À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

 

 

Sobre mim

Bruno Bragatto graduou-se em Automação Industrial pelo IFSP, pós-graduado em Banco de Dados Oracle pela FIAP e é Oracle Database 11g Administrator Certified Associate e Microsoft MCSA – SQL 2016 Database Administration.


OCA - Oracle 11g Database Administrator