Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal boa tarde,
Muito tenho pesquisa sobre intervalo entre duas datas e muito tenho encontrado pessoal que tem essa neecessidade e muitas, muitas mesmo, são as dificuldades para cada situação/pessoa.
No meu caso não é diferente.
Por isso peço ajuda a vocês, pois " n " cabeças pensam melhor que uma.
Em outros post's, com ajuda dos Senhores (as) contrui um calendário Brasileiro tendo os feriados fixos e variados ( ou seja todos os calendários).
Minhas variáveis no código abaixo traz os feriados desde 2009 ao ano corrente + 01 ( neste caso 2004).
Abaixo o script e o resultado do mesmo:
/*****************************************************Feriados*************************************************************************************
// Feriados Fixos
// {Years}
LET Var1 = 2009;
LET Var2 = year(today())+1;// $(n)+1;
LET VarTotal = 1;
Sub Cal (Var1,Var2,VarTotal)
for n = ($(Var1)) to ($(Var2)) Step 1
Calendar:
LOAD * INLINE [
Holiday, Desc
01/01/$(n), Confraternização Universal
01/25/$(n), Aniversário São Paulo
04/21/$(n), Tiradentes
05/01/$(n), Dia do Trabalho
06/15/$(n), Aniversário Itajaí
07/09/$(n), Deflagração da Revolução Constitucionalista de 1932
09/07/$(n), Independência do Brasil
10/12/$(n), Nossa Sra. Aparecida - Padroeira do Brasil
11/02/$(n), Finados
11/15/$(n), Proclamação da República
12/24/$(n), Véspera de Natal
12/25/$(n), Natal
12/31/$(n), Véspera de Ano Novo];
Pascoa:
Load
Date(Holiday,'M/DD/YYYY') As Holiday,
//Para anos entre 1901 e 2099: X = 24 e Y = 5 para anos de 10
if(((if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
>=10 // Maior que 9
),
(
'4/'& // Abril
(((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
-9 // Menos 9
) &'/'&($(n)) // YYYY
), ('3/'& // Março
(((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
+22 // Mais 22
)&'/'&($(n)) // YYYY
)))
='4/26/2076'), '4/19/2076',
if(((if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
>=10 // Maior que 9
),
(
'4/'& // Abril
(((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
-9 // Menos 9
) &'/'&($(n)) // YYYY
), ('3/'& // Março
(((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
+22 // Mais 22
)&'/'&($(n)) // YYYY
))) ='4/25/2049'), '4/18/2049',
(if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
>=10 // Maior que 9
),
(
'4/'& // Abril
(((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
-9 // Menos 9
) &'/'&($(n)) // YYYY
), ('3/'& // Março
(((Mod(((19)*(Mod($(n),19)))+(24),30)) // d
+ // +
(Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e
+22 // Mais 22
)&'/'&($(n)) // YYYY
))))) As Pascoa, // Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril senão DIA = (d + e + 22) e MES = Março
Desc
Resident Calendar;
Drop Table Calendar;
Calendario_Temporario:
Load
Date(if( Year(today())>1, Pascoa - 48, ''),'M/DD/YYYY') As Vespera_de_Carnaval,
Date(if( Year(today())>1, Pascoa - 47, ''),'M/DD/YYYY') As Carnaval,
Date(if( Year(today())>1, Pascoa - 46, ''),'M/DD/YYYY') As Cinzas,
Date(if( Year(today())>1, Pascoa - 2, ''),'M/DD/YYYY') As Sexta_Feira_Santa,
Date(if( Year(today())>1, Pascoa + 60, ''),'M/DD/YYYY') As Corpus_Christi,
Date(Pascoa, 'M/DD/YYYY') As Pascoa,
Holiday,
Desc
Resident Pascoa;
Drop Table Pascoa;
next
Feriados_Fixo:
load
Holiday,
Desc
Resident Calendario_Temporario;
Feriado_Variavel:
Load
Vespera_de_Carnaval,
Carnaval,
Cinzas,
Sexta_Feira_Santa,
Corpus_Christi,
Pascoa
Resident Calendario_Temporario;
Drop Table Calendario_Temporario;
LET qtde_fields = NoOfFields('Feriado_Variavel');
FOR i=1 TO qtde_fields
LET campo = FieldName($(i), 'Feriado_Variavel');
Feriado:
Load
$(campo) As Holiday,
if(upper('$(campo)')='VESPERA_DE_CARNAVAL', 'Véspera de Carnaval',
if(upper('$(campo)')='SEXTA_FEIRA_SANTA', 'Sexta Feira Santa',
if(upper('$(campo)')='CORPUS_CHRISTI', 'Corpus Christi',
if(upper('$(campo)')='CINZAS', 'Quarta Feira de Cinzas', '$(campo)')))) As Desc
Resident Feriado_Variavel;
Next
// a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.
Feriado:
Load
Date(Holiday, 'MM/D/YYYY') As Holiday,
Weekday(Holiday) As DiaSemana,
Desc
Resident Feriados_Fixo;
Drop Table Feriados_Fixo;
Drop Table Feriado_Variavel;
end sub
Call Cal (Var1,Var2,VarTotal);
Abaixo o resultado do script acima:
Holiday | Desc | DiaSemana |
1/1/2009 | Confraternização Universal | Thu |
1/25/2009 | Aniversário São Paulo | Sun |
2/23/2009 | Véspera de Carnaval | Mon |
2/24/2009 | Carnaval | Tue |
2/25/2009 | Quarta Feira de Cinzas | Wed |
4/10/2009 | Sexta Feira Santa | Fri |
4/12/2009 | Pascoa | Sun |
4/21/2009 | Tiradentes | Tue |
5/1/2009 | Dia do Trabalho | Fri |
6/11/2009 | Corpus Christi | Thu |
6/15/2009 | Aniversário Itajaí | Mon |
7/9/2009 | Deflagração da Revolução Constitucionalista de 1932 | Thu |
9/7/2009 | Independência do Brasil | Mon |
10/12/2009 | Nossa Sra. Aparecida - Padroeira do Brasil | Mon |
11/2/2009 | Finados | Mon |
11/15/2009 | Proclamação da República | Sun |
12/24/2009 | Véspera de Natal | Thu |
12/25/2009 | Natal | Fri |
12/31/2009 | Véspera de Ano Novo | Thu |
1/1/2010 | Confraternização Universal | Fri |
1/25/2010 | Aniversário São Paulo | Mon |
2/15/2010 | Véspera de Carnaval | Mon |
2/16/2010 | Carnaval | Tue |
2/17/2010 | Quarta Feira de Cinzas | Wed |
4/2/2010 | Sexta Feira Santa | Fri |
4/4/2010 | Pascoa | Sun |
4/21/2010 | Tiradentes | Wed |
5/1/2010 | Dia do Trabalho | Sat |
6/3/2010 | Corpus Christi | Thu |
6/15/2010 | Aniversário Itajaí | Tue |
7/9/2010 | Deflagração da Revolução Constitucionalista de 1932 | Fri |
9/7/2010 | Independência do Brasil | Tue |
10/12/2010 | Nossa Sra. Aparecida - Padroeira do Brasil | Tue |
11/2/2010 | Finados | Tue |
11/15/2010 | Proclamação da República | Mon |
12/24/2010 | Véspera de Natal | Fri |
12/25/2010 | Natal | Sat |
12/31/2010 | Véspera de Ano Novo | Fri |
1/1/2011 | Confraternização Universal | Sat |
1/25/2011 | Aniversário São Paulo | Tue |
3/7/2011 | Véspera de Carnaval | Mon |
3/8/2011 | Carnaval | Tue |
3/9/2011 | Quarta Feira de Cinzas | Wed |
4/21/2011 | Tiradentes | Thu |
4/22/2011 | Sexta Feira Santa | Fri |
4/24/2011 | Pascoa | Sun |
5/1/2011 | Dia do Trabalho | Sun |
6/15/2011 | Aniversário Itajaí | Wed |
6/23/2011 | Corpus Christi | Thu |
7/9/2011 | Deflagração da Revolução Constitucionalista de 1932 | Sat |
9/7/2011 | Independência do Brasil | Wed |
10/12/2011 | Nossa Sra. Aparecida - Padroeira do Brasil | Wed |
11/2/2011 | Finados | Wed |
11/15/2011 | Proclamação da República | Tue |
12/24/2011 | Véspera de Natal | Sat |
12/25/2011 | Natal | Sun |
12/31/2011 | Véspera de Ano Novo | Sat |
1/1/2012 | Confraternização Universal | Sun |
1/25/2012 | Aniversário São Paulo | Wed |
2/20/2012 | Véspera de Carnaval | Mon |
2/21/2012 | Carnaval | Tue |
2/22/2012 | Quarta Feira de Cinzas | Wed |
4/6/2012 | Sexta Feira Santa | Fri |
4/8/2012 | Pascoa | Sun |
4/21/2012 | Tiradentes | Sat |
5/1/2012 | Dia do Trabalho | Tue |
6/7/2012 | Corpus Christi | Thu |
6/15/2012 | Aniversário Itajaí | Fri |
7/9/2012 | Deflagração da Revolução Constitucionalista de 1932 | Mon |
9/7/2012 | Independência do Brasil | Fri |
10/12/2012 | Nossa Sra. Aparecida - Padroeira do Brasil | Fri |
11/2/2012 | Finados | Fri |
11/15/2012 | Proclamação da República | Thu |
12/24/2012 | Véspera de Natal | Mon |
12/25/2012 | Natal | Tue |
12/31/2012 | Véspera de Ano Novo | Mon |
1/1/2013 | Confraternização Universal | Tue |
1/25/2013 | Aniversário São Paulo | Fri |
2/11/2013 | Véspera de Carnaval | Mon |
2/12/2013 | Carnaval | Tue |
2/13/2013 | Quarta Feira de Cinzas | Wed |
3/29/2013 | Sexta Feira Santa | Fri |
3/31/2013 | Pascoa | Sun |
4/21/2013 | Tiradentes | Sun |
5/1/2013 | Dia do Trabalho | Wed |
5/30/2013 | Corpus Christi | Thu |
6/15/2013 | Aniversário Itajaí | Sat |
7/9/2013 | Deflagração da Revolução Constitucionalista de 1932 | Tue |
9/7/2013 | Independência do Brasil | Sat |
10/12/2013 | Nossa Sra. Aparecida - Padroeira do Brasil | Sat |
11/2/2013 | Finados | Sat |
11/15/2013 | Proclamação da República | Fri |
12/24/2013 | Véspera de Natal | Tue |
12/25/2013 | Natal | Wed |
12/31/2013 | Véspera de Ano Novo | Tue |
1/1/2014 | Confraternização Universal | Wed |
1/25/2014 | Aniversário São Paulo | Sat |
3/3/2014 | Véspera de Carnaval | Mon |
3/4/2014 | Carnaval | Tue |
3/5/2014 | Quarta Feira de Cinzas | Wed |
4/18/2014 | Sexta Feira Santa | Fri |
4/20/2014 | Pascoa | Sun |
4/21/2014 | Tiradentes | Mon |
5/1/2014 | Dia do Trabalho | Thu |
6/15/2014 | Aniversário Itajaí | Sun |
6/19/2014 | Corpus Christi | Thu |
7/9/2014 | Deflagração da Revolução Constitucionalista de 1932 | Wed |
9/7/2014 | Independência do Brasil | Sun |
10/12/2014 | Nossa Sra. Aparecida - Padroeira do Brasil | Sun |
11/2/2014 | Finados | Sun |
11/15/2014 | Proclamação da República | Sat |
12/24/2014 | Véspera de Natal | Wed |
12/25/2014 | Natal | Thu |
12/31/2014 | Véspera de Ano Novo | Wed |
PS: Trabalho no idioma Inglês 'M/D/YYYY' .
O nome da tabela é " Feriado "
Até aqui sem problemas.
A minha dúvida consite no comparar o resultado da tabela Feriado com outra tabela, onde a unica ligação são as datas do Feriado e o Vencimento de um documento.
Qual é a melhor form ade fazer isso, o que sugerem, um Lado na tabela Feriado com o Load na outra tabela ( documento) comparam todas as datas da tabela Feriado ?
Sugerem outra opção?
Minha dúvida é com referencia a ajunção e compraração de dados entre as duas tabelas e não calculo entre elas.
Fazer um Join da tabela de feriados com calendário com campo DATA, pq ai vc criaria uma tabela de datas só, e as datas que são feriado ficariam com alguma descrição.
Fazer um Join da tabela de feriados com calendário com campo DATA, pq ai vc criaria uma tabela de datas só, e as datas que são feriado ficariam com alguma descrição.
Tem certo momentos que não conseguimos enchergar um palmo a frente do nariz.
Desculpe te fazer ler todo esse post para uma pergunta no mínimo "ridicula".
No meu caso usei a função LEFT KEEP .
Obrigado Issosorio.
Cara ler todo esse post, se ta brincando....esse script que vc fez é a salvação para feriados AHAHAAHAHHAAHHAAH Sempre esbarro nesse problema, agora tenho seu script salvo.
Valeu mais uma vez, quando precisar estamos ai.