Configurar data

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
Elie
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 27 Mai 2009 5:06 pm
Localização: PR

Sou iniciante em programação e estou com uma dúvida:
Tenho um retorno de uma data em meses, por exemplo, 27 meses.
Preciso transformar em anos e meses, como faço?
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Você pode tratar isso em uma função que checa qtd de meses, faz os calculos e retorna os anos e o resto continua em messes.

ai vai um exemplo bobo.

Selecionar tudo

DECLARE
  N NUMBER := 27;
  ANOS  NUMBER := 0;
  MESES NUMBER := 0;
BEGIN
  LOOP
    IF N >= 12 THEN
      ANOS := ANOS + 1;
      N    := N - 12;
    ELSIF N <= 11 THEN
      MESES := N;
      N := 0;
    END IF;
    EXIT WHEN N = 0;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('ANOS '||ANOS);
  DBMS_OUTPUT.PUT_LINE('MESES '||MESES);
END;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5018
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pode fazer mais simples, usando TRUNC e MOD.
Veja:

Selecionar tudo

select
   qtdmeses
,  trunc(qtdmeses/ 12) anos
,  mod  (qtdmeses, 12) meses

from ( select rownum qtdmeses from all_tables where rownum < 40 ) 
Saída:

Selecionar tudo

SQL> select
  2     qtdmeses
  3  ,  trunc(qtdmeses/ 12) anos
  4  ,  mod  (qtdmeses, 12) meses
  5  from ( select rownum qtdmeses from all_tables where rownum < 40 )
  6  /

  QTDMESES       ANOS      MESES
---------- ---------- ----------
         1          0          1
         2          0          2
         3          0          3
         4          0          4
         5          0          5
         6          0          6
         7          0          7
         8          0          8
         9          0          9
        10          0         10
        11          0         11
        12          1          0
        13          1          1
        14          1          2
        15          1          3
        16          1          4
        17          1          5
        18          1          6
        19          1          7
        20          1          8
        21          1          9
        22          1         10
        23          1         11
        24          2          0
        25          2          1
        26          2          2
        27          2          3
        28          2          4
        29          2          5
        30          2          6
        31          2          7
        32          2          8
        33          2          9
        34          2         10
        35          2         11
        36          3          0
        37          3          1
        38          3          2
        39          3          3

39 rows selected.

SQL> 
Elie
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 27 Mai 2009 5:06 pm
Localização: PR

Muito obrigada a todos pela ajuda.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes