Boa noite Chiappa, acho que voce nao acompanhou corretamente a thread, o que eu quero é:
1) Tendo uma data como parametro, saber em qual SEMANA do MES esta data esta situada, sendo que a virada da semana tera de ser TODO DOMINGO. Pegando o calendario que vc mandou, vou exemplificar: 01/02/2013 --> Semana 01 do mês - Sexta feira 02/02/2013 --> Semana 01 do mês - Sabado 03/02/2013 --> Semana 02 do mês - Domingo (como é domingo, faz a virada da semana) 04/02/2013 --> Semana 02 do mês - Segunda feira 05/02/2013 --> Semana 02 do mês - Terça feira 06/02/2013 --> Semana 02 do mês - Quarta feira 07/02/2013 --> Semana 02 do mês - Quinta feira 08/02/2013 --> Semana 02 do mês - Sexta feira 09/02/2013 --> Semana 02 do mês - Sabado 10/02/2013 --> Semana 03 do mês - Domingo (como é domingo, faz a virada da semana) 04/02/2013 --> Semana 03 do mês - Segunda feira ..... 17/02/2013 --> Semana 04 do mês - Domingo (como é domingo, faz a virada da semana) e assim por diante.......... Mas deixando bem claro, o que me interessa é a SEMANA Emerson Sanches Analista de Sistemas Em 28 de fevereiro de 2013 18:49, J. Laurindo Chiappa < jlchia...@yahoo.com.br> escreveu: > ** > > > 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 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.aspxomodelo > 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] > > > > > [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -------------------------------------------------------------------------------------------------------------------------- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -------------------------------------------------------------------------------------------------------------------------- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ ------------------------------------------------------------------------------------------------------------------------ Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html