Pular para o conteúdo
  • Este tópico contém 9 respostas, 2 vozes e foi atualizado pela última vez 14 anos, 7 meses atrás por leandrolbs.
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #99017
    SamantaS
    Participante

      [color=blue][b]Olha eu aqui de novo, pessoal.
      Bom, minha dívida é a seguinte: criei uma query para pegar as horas trabalhadas pelos funcionários. Sendo que o sistema calcula em minutos.Gostaria de saber como eu faço para fazer essa conversão.
      Por exemplo: o funcionário que trabalha até as 17:44, tem 1064 min. Com a query e eu criei, ele me da o resultado dessa forma: 17,7166666666666666666666666666666666667

      A query é a seguinte:

      SELECT (CASE WHEN MAX(BATIDA) <='1064' THEN TO_CHAR(MAX(BATIDA)/60) WHEN MAX(BATIDA) >='1065' THEN TO_CHAR((MAX(BATIDA)- 1064)/60)
      WHEN MAX(BATIDA) >='1185' THEN TO_CHAR((MAX(BATIDA)-1064)/60)
      END)

      FROM ABATFUN

      WHERE CODCOLIGADA = '1100'
      AND CHAPA= '00036'
      AND DATA ='25/04/2011'

      O resultado dessa query é 4,8, pois as horas trabalhadas pelo funcionário é de 1352. Esse reultado foi diminuido com o numero de horas trabalhadas normais 1064 e dividido por 60, para me dar as horas extras trabalhadas. Como eu devo fazer para quebrar esse valor e ficar com as horas extras certinhas?

      Agradeço desde já… 🙂 [/color][/b]

      #99021
      leandrolbs
      Participante

        SELECT
        TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (MAX(BATIDA)*60, 'second'),'hh24:mi:ss') hr
        FROM DUAL;

        TRUNC (SYSDATE) -- Com ele, vc trata o resultando na hora do dia.
        /* sem ele result = +000000000 17:04:00.000000000 /
        MAX(BATIDA)
        60 -- estou passando para segundos.

        Tente assim….. poste o result por favor.

        #99022
        leandrolbs
        Participante

          NUMTODSINTERVAL vc pode usar :
          ‘DAY,’HOUR’, ‘MINUTE’, ‘SECOND’

          #99023
          leandrolbs
          Participante

            aproveitando, sai testando umas rotinas..

            deste outro modo tambem é possivel:


            select
            extract(hour from numtodsinterval (MAX(BATIDA), 'minute')) + (extract(day from numtodsinterval (MAX(BATIDA), 'minute'))*24) || ':' ||
            to_char (trunc (sysdate) + numtodsinterval (MAX(BATIDA), 'minute'),'mi:ss') hr
            from dual;

            #99024
            leandrolbs
            Participante

              outro modo:


              select to_char(1024/60,'FM00') as Horas ,to_char(abs(mod(1024,60)),'FM00')as Minutos from dual;

              #99025
              SamantaS
              Participante

                [quote=”leandrolbs”:35ae0ddc]NUMTODSINTERVAL vc pode usar :
                ‘DAY,’HOUR’, ‘MINUTE’, ‘SECOND'[/quote]
                Olá…Poxa, desculpa, mas eu fiz uma pequena alteração no meu tópico.. Mesmo assim, tentei usar a que você me passou e não deu certo. Ta dizendo que a palavra chave não foi encontrada. 😳

                #99027
                SamantaS
                Participante

                  [quote=”leandrolbs”:1bl8qbpi]outro modo:


                  select to_char(1024/60,'FM00') as Horas ,to_char(abs(mod(1024,60)),'FM00')as Minutos from dual;
                  [/quote]

                  Nenhum desses está dando certo! Já tentei de um monte de formas
                  😥

                  #99034
                  leandrolbs
                  Participante

                    post a estrutura da tabela (somente campos usados). e tambem coloque umas linhas desta tabela por favor.. quando lhe passei todas as opção não vi que alterou o post, ai mudou tudo…rs

                    #99047
                    SamantaS
                    Participante

                      [quote=”leandrolbs”:24x67uj4]post a estrutura da tabela (somente campos usados). e tambem coloque umas linhas desta tabela por favor.. quando lhe passei todas as opção não vi que alterou o post, ai mudou tudo…rs[/quote]
                      rs..Consegui fazer uma parte, mas agora estou com outro problema.
                      Qnd eu calculo a hr extra 80%, o calculo sai certinho, mas qnd eu calculo a hr extra 60% o calculo sai errado. Era para dar 2h e 14m, e esta saindo 2h e 46m. Esse valor é igual ao hr extra 80%. Tem como me ajudar?

                      SELECT F.CHAPA,
                      F.SALARIO,
                      (CASE WHEN MAX(A.BATIDA) '0' THEN TO_CHAR(TRUNC(MOD(MAX((A.BATIDA)-1186),3600)/60),'09') || ':' || TO_CHAR(MOD(MOD(MAX((A.BATIDA)-1186),3600),60),'09')
                      ELSE '0'
                      END) AS HR_EXTRA_60,
                      (CASE WHEN MAX(A.BATIDA) >='1186' THEN TO_CHAR(TRUNC(MOD(MAX((A.BATIDA)-1186),3600)/60),'09') || ':' || TO_CHAR(MOD(MOD(MAX((A.BATIDA)-1186),3600),60),'09')
                      ELSE '0'
                      END) AS HR_EXTRA_80,

                         CASE WHEN MAX(A.BATIDA) &gt;= '1065' THEN TO_CHAR(TRUNC(MOD(MAX((A.BATIDA)-1065),3600)/60),'09') || ':' || TO_CHAR(MOD(MOD(MAX((A.BATIDA)-1064),3600),60),'09')
                               END AS TOTAL
                      

                      FROM PFUNC F

                      JOIN ABATFUN A
                      ON F.CODCOLIGADA = A.CODCOLIGADA
                      AND F.CHAPA = A.CHAPA

                      WHERE F.CODCOLIGADA = '1100'
                      AND F.CHAPA ='00038'
                      AND A.DATA = '25/04/2011'

                      GROUP BY F.SALARIO,
                      F.CHAPA

                      Estou achando q nas hrs extras 60%r não pode ser um valor fixo…Mas não tenho ideia no q colocar la…Será q alguém pode me ajudar?
                      Desde já, obrigada

                      #99077
                      leandrolbs
                      Participante

                        SamantaS, tem varios meios de cálculos, alguns deles lhe passei, mas que isso é meio complicado pois não tenho base pra testes…etc

                        se quiser, me envia um email com uma estrutura semelhante, e tento lhe ajudar.

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