Como descobrir o A semana, O mês e a Quinzena corrente

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
matheus.szmodic
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 07 Nov 2013 7:10 am

Bom dia a Todos,

Sou iniciante em PL/SQL estou fazendo uma integração entre dois sistemas e me deparei com a seguinte situação, a tabela de origem tem 3 colunas cujo os valores são: Código da Semana, Código do Mês e Código do Ano, eu já identifiquei o padrão de nomenclatura que são dados a cada código respectivamente, nesse sistema de destino.

Preciso saber se existe algo no ORACLE em que eu consiga descobrir qual a semana, a quinzena e o ano corrente, exemplo:

a data 08/01/2014 - está na quinzena 1, na semana 3 e no ano 2014
espero ter demonstrado o que eu preciso.

Agradeço desde já se alguém puder me ajudar!!
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá matheus.szmodic,

Você vai precisar trabalhar com as FUNCOES DE DATA do ORACLE para solucionar seu problema.

Existe um excelente artigo sobre este tema no ORACLE-BASE: http://www.oracle-base.com/articles/mis ... ervals.php. Ele está em inglês, mas descreve em bastante detalhes estas funções. Com certeza devem existir artigos sobre este em português, inclusive aqui no forum GLUFKE.

Também existe a documentação oficial da oracle. Consulte este link: http://docs.oracle.com/cd/E11882_01/ser ... m#CDEHIFJA

Vamos voltar ao seu problema. Consultando o arquivo acima, você vai precisar usar a função TO_CHAR(<data>,<formato/máscara>) para obter a informação que você precisa.

Na função TO_CHAR, você pode usar o seguintes "formato/máscara":
WW- WEEK -> Informa a semana do ano à qual a data pertence
YYYY - YEAR -> Informa o ano
DD - DAY -> dia da data
Agora, para identificar a quinzena do mês corrente, você precisaria estabelecer um critério: se o dia for menor que 16, então a data corresponde à primeira quinzena do mês, caso contrário à segunda.

Vamos desenvolver uma querie que retorna tudo isso:

Selecionar tudo

SELECT TO_CHAR(TO_DATE('08/11/2014','DD/MM/RRRR'),'DD/MM/RRRR') AS "DATA",
       TO_CHAR(TO_DATE('08/11/2014','DD/MM/RRRR'),'WW') AS "SEMANA_ANO",
       CASE 
         WHEN TO_NUMBER(TO_CHAR(TO_DATE('08/11/2014','DD/MM/RRRR'),'DD')) < 16 
              THEN 01 
              ELSE 02 
       END AS "QUINZENA_mês"
 FROM DUAL;
 

SQL> DATA       SE QUINZENA_mês
     ---------- -- ------------
     08/11/2014 45            1 
Abraços,

Sergio Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 14 visitantes