Script com função para montagem de data com último dia útil do mês, considerando a tabela de feriados do RM, ou seja, se o último dia do mês cair em algum feriado cadastrado no RM, retorna o dia útil anterior.Para o caso de usar versão do SQL mais antiga, onde não existe a função EOMONTH(). É só comentar a linha em questão que usa essa função do SQL Server deixando a outra. Mantenha a que preferir usar...
If OBJECT_ID (N'dbo.fnc_UltDiaUtilRM' ) is not null
Drop Function dbo.fnc_UltDiaUtilRM;
Go
Create Function dbo.fnc_UltDiaUtilRM (@DataBase DateTime)
Returns Date
as
Begin
Declare @UltDia Date
Declare @CalendOficial Varchaaaar(10)
Set @CalendOficial = '0000001' -- Código do Calendário Oficial a ser usado do RM
-- Usando a Função EOMONTH que funciona para o SQL 2012 em diante...
Set @UltDia = EOMONTH(@DataBase)
-- Usando a Função DateAdd apenas para montar o último dia do mês, que funciona para o SQL 2008 e mais atuais...
Set @UltDia = DATEADD(dd, -DAY(DATEADD(M, 1, @DataBase)), DATEADD(M, 1, @DataBase))
inicio:
If ( Select DiaFeriado
From GFeriado (nolock)
Where DiaFeriado = @UltDia
and CodCalendario = @CalendOficial ) is not null
Begin
Set @UltDia = DateAdd(d, -1, @UltDia)
End
if
(Select DatePart(dw, @UltDia)) in (1, 7)
or
( Select DiaFeriado
From GFeriado (nolock)
Where DiaFeriado = @UltDia
and CodCalendario = @CalendOficial ) is not null
Begin
Set @UltDia = DateAdd(d, -1, @UltDia)
goto inicio
End
Return(@UltDia)
End
Go
-- Exemplo de utilização
Select dbo.fnc_UltDiaUtilRM (Getdate())
Exemplo de utilização
Select dbo.fnc_UltDiaUtilRM (Getdate())
**** Veja que foi usado em uma parte no texto acima o VARCHAAAAR e não o nome correto, pois, há um bloqueio de segurança para evitar códigos maliciosos que façam ataques no fórum. Então, apenas enviando em arquivo, ou trocando essa palavra desta forma que fiz. Ao copiar e passar para seu ambiente, sempre deverá corrigir para o termo correto!!