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] >