Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #93476
    VINI85
    Participante

      Galera, preciso de uma ajuda.

      Tenho uma tabela chamada PFHSTPROV essa tabela guarda as provisões de férias e 13° dos funcionários, tem o campo registro, nome(nome do funcionário, mes, ano, valor13, valorferias.

      Preciso de uma sentença que pegue o mes atual – o mes anterior, e quando for janeiro mês 1 preciso que mude o ano.

      Exempo:
      Mes: 1
      Ano :2010

      Mes: 12
      Ano 2009

      preciso que retorne o registro, nome, mes, ano, valor13 e valorferias.

      Obrigado.

      #93479
      Marcio68Almeida
      Participante

        SQL> Select to_char (sysdate, 'mm/yyyy') data_atual,
        to_char (sysdate - 31, 'mm/yyyy') mes_anterior from dual;

        DATA_AT MES_ANT
        ------- -------
        03/2010 02/2010

        #93480
        diegolenhardt
        Participante

          Pode usar o ADD_MONTHS,


          select add_months(sysdate, -1) mes_passado from dual

          #93481
          VINI85
          Participante

            [quote=”Marcio68Almeida”:fcy2ank7]SQL> Select to_char (sysdate, 'mm/yyyy') data_atual,
            to_char (sysdate - 31, 'mm/yyyy') mes_anterior from dual;

            DATA_AT MES_ANT
            ------- -------
            03/2010 02/2010
            [/quote]

            Marcio, meu campo não é data, tenho uma coluna MES e uma coluna ANO.

            #93487
            fsitja
            Participante

              Algo como:

              SELECT mes,
              ano,
              to_number(to_char(dt_mes_anterior, 'MM')) mes_ant,
              to_number(to_char(dt_mes_anterior, 'YYYY')) ano_ant
              FROM (SELECT mes,
              ano,
              add_months(to_date(lpad(mes, 2, '0') || ano
              , 'MM/YYYY'), -1) dt_mes_anterior
              FROM t);

              Exemplo:
              ————————————————————————————————————————————————-

              SQL> with t as (
              2 select 1 mes, 2010 ano from dual)
              3 -- fim dados de exemplo
              4 SELECT mes,
              5 ano,
              6 to_number(to_char(dt_mes_anterior, 'MM')) mes_ant,
              7 to_number(to_char(dt_mes_anterior, 'YYYY')) ano_ant
              8 FROM (SELECT mes,
              9 ano,
              10 add_months(to_date(lpad(mes, 2, '0') || ano
              11 , 'MM/YYYY'), -1) dt_mes_anterior
              12 FROM t);

              MES ANO MES_ANT ANO_ANT
              ---------- ---------- ---------- ----------
              1 2010 12 2009

              SQL>

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.