Antes de sequer começar a olhar esse código, PLZ nos explica o Objetivo e a 
LÓGICA que vc quer : se eu acompanhei corretamente a thread, o que vc quer é , 
para uma dado dia de um mês, saber qual a semana dentro do mês para que esse 
dia cai, COM a exigência de que a semana sempre começa numa segunda-feira, E 
que a semana acaba em 7 dias após essa segunda-feira... SE é isso, POR QUE vc 
não usou o algoritmo MUITO mais simples contido no link que passei em resposta 
anterior ?? 
  Eu IMAGINO que a sua lógica deve ser diferenciada, já que vc quer obter 4 
semanas por mês, sendo que (cfrme o link com o calendário que passei 
anteriormente, e cfrme o Milton já disse) se vc usar a lógica citada acima é 
CLARO que vc vai obter 5 semanas por mês, é o que acontece nas Folhinhas que a 
gente usa rotineiramente...

  []s

   Chiappa

--- Em oracle_br@yahoogrupos.com.br, Emerson Sanches <emerson.sanches@...> 
escreveu
>
> Segue a função, mas vou tentar explicar o que disse. Para que um mês no
> ano, tenha exatamente 4 semanas, esse mês deve ser Fevereiro, não pode ser
> bissexto, e deve começar em um domingo, que é o inicio da semana padrão, e
> o inicio da semana no meu exemplo. Se o inicio do mês de fevereiro não for
> domingo, este também terá 5 semanas. Consegui explicar?
> 
> Obrigado pela ajuda..............e se alguém encontrar algum furo na
> função, por favor, de um toque.....................obrigado de
> novo...............
> 
> 
> CREATE OR REPLACE FUNCTION SGI5_FNC_GERAL_SEMANA_DO_MES(DATA DATE)
>   RETURN NUMBER AS
>     V_SEM NUMBER;
> 
>   G_MES_DATA VARCHAR2(2);
>   G_ANO_DATA VARCHAR2(4);
> 
>   G_DIA_SEM_INI NUMBER;
>   G_MES_INI     DATE;
>   G_PRI_DOM     DATE;
>   G_SEG_DOM     DATE;
>   G_TER_DOM     DATE;
>   G_QUA_DOM     DATE;
>   G_QUI_DOM     DATE;
> BEGIN
>   --pego o dia da semana em que inicia o mes
>   G_MES_DATA:= TO_CHAR(DATA,'MM');
>   G_ANO_DATA:= TO_CHAR(DATA,'YYYY');
> 
>   G_DIA_SEM_INI:=
> TO_NUMBER(TO_CHAR(TO_DATE('01/'||G_MES_DATA||'/'||G_ANO_DATA,'DD/MM/YYYY'),'D'));
>   G_MES_INI    := TO_DATE('01/'||G_MES_DATA||'/'||G_ANO_DATA,'DD/MM/YYYY');
> 
>   --subtraio do primeiro dia do mes a quantde necessaria pra chegar no
> primeiro domingo subjacente
>   IF G_DIA_SEM_INI = 1 THEN
>     G_PRI_DOM:= G_MES_INI;
>   ELSIF G_DIA_SEM_INI = 2 THEN
>     G_PRI_DOM:= G_MES_INI -1;
>   ELSIF G_DIA_SEM_INI = 3 THEN
>     G_PRI_DOM:= G_MES_INI -2;
>   ELSIF G_DIA_SEM_INI = 4 THEN
>     G_PRI_DOM:= G_MES_INI - 3;
>   ELSIF G_DIA_SEM_INI = 5 THEN
>     G_PRI_DOM:= G_MES_INI - 4;
>   ELSIF G_DIA_SEM_INI = 6 THEN
>     G_PRI_DOM:= G_MES_INI - 5;
>   END IF;
> 
>   --registro as datas de todos os domingos do mes
>   G_SEG_DOM:= G_PRI_DOM + 7;
>   G_TER_DOM:= G_PRI_DOM + 14;
>   G_QUA_DOM:= G_PRI_DOM + 21;
>   G_QUI_DOM:= G_PRI_DOM + 28;
> 
>   --testo a data informada com as datas dos domingos do mes conseguindo
> assim a semana do mes.
>   IF DATA < G_SEG_DOM THEN
>     V_SEM:= 1;
>   ELSIF DATA < G_TER_DOM THEN
>     V_SEM:= 2;
>   ELSIF DATA < G_QUA_DOM THEN
>     V_SEM:= 3;
>   ELSIF DATA < G_QUI_DOM THEN
>     V_SEM:= 4;
>   ELSE
>     V_SEM:= 5;
>   END IF;
> 
>   RETURN V_SEM;
> END;
> 
> 
> Emerson Sanches
> Analista de Sistemas
> 
> 
> Em 28 de fevereiro de 2013 16:18, J. Laurindo Chiappa <
> jlchiappa@...> escreveu:
> 
> > **
> >
> >
> > Com certeza, eu também não entendi patavina , principalmente quando ele
> > diz que "01 de fevereiro deve cair num Domingo" : baixando em
> > http://office.microsoft.com/pt-br/templates/calendario-anual-de-2013-de-visualizacao-rapida-formato-segunda-a-domingo-TC103704176.aspxo
> >  modelo com um calendário 2013 com a semana começando na segunda-feira não
> > é nada disso ...
> >
> > Plz mostra aí a SUA função, colega, que algo não tá batendo....
> >
> > []s
> >
> > Chiappa
> >
> > --- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr."
> > escreveu
> >
> > >
> > > Vc não falou especificamente qual é o problema... rs...
> > >
> > > Todos os meses do ano tem 5 semanas - OK, verdade.
> > > E....??
> > > Vc não falou como está retornando na TUA função, então não tem como a
> > gente
> > > te ajudar... rs...
> > >
> > >
> > >
> > > 2013/2/28 Emerson Sanches
> > >
> > > > **
> > > >
> > > >
> > > > Pessoal, fiz a function pra retornar o dia da semana. Parece que esta
> > > > funcionando corretamente, mas fazendo esses teste reparei que TODOS os
> > > > meses do ano tem 5 semanas - nesta maneira de contar -, a unica exceção
> > > > seria o mês de fevereiro, ainda assim ele precisa ter somente 28 dias
> > e o
> > > > dia 01/02 deve cair em um domingo.
> > > > Alguém já reparou nisso? Ou minha function esta
> > louca...........rs.......
> > > >
> > > >
> > > > Emerson Sanches
> > > > Analista de Sistemas
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> >  
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a