- Este tópico contém 9 respostas, 2 vozes e foi atualizado pela última vez 14 anos, 7 meses atrás por
leandrolbs.
-
AutorPosts
-
29 de abril de 2011 às 11:13 pm #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,7166666666666666666666666666666666667A 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]
29 de abril de 2011 às 11:54 pm #99021leandrolbs
ParticipanteSELECT
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.
29 de abril de 2011 às 11:56 pm #99022leandrolbs
ParticipanteNUMTODSINTERVAL vc pode usar :
‘DAY,’HOUR’, ‘MINUTE’, ‘SECOND’29 de abril de 2011 às 11:59 pm #99023leandrolbs
Participanteaproveitando, 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;
30 de abril de 2011 às 12:02 am #99024leandrolbs
Participanteoutro modo:
select to_char(1024/60,'FM00') as Horas ,to_char(abs(mod(1024,60)),'FM00')as Minutos from dual;
30 de abril de 2011 às 12:03 am #99025SamantaS
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. 😳30 de abril de 2011 às 12:11 am #99027SamantaS
Participante[quote=”leandrolbs”:1bl8qbpi]outro modo:
[/quote]
select to_char(1024/60,'FM00') as Horas ,to_char(abs(mod(1024,60)),'FM00')as Minutos from dual;
Nenhum desses está dando certo! Já tentei de um monte de formas
😥30 de abril de 2011 às 4:32 am #99034leandrolbs
Participantepost 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
2 de maio de 2011 às 9:56 pm #99047SamantaS
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) >= '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 TOTALFROM PFUNC F
JOIN ABATFUN A
ON F.CODCOLIGADA = A.CODCOLIGADA
AND F.CHAPA = A.CHAPAWHERE 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á, obrigada4 de maio de 2011 às 9:33 pm #99077leandrolbs
ParticipanteSamantaS, 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.
-
AutorPosts
- Você deve fazer login para responder a este tópico.