CASE
WHEN (PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO) - (PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO) < 0 THEN ((PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO) - (PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO)) * -1
ELSE (PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO) - (PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO)
END DIFERENCA,
PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO AS TOTAL_PROGRAMADO,
PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO AS TOTAL_REALIZADO
Converter Substração Resultado em Decimal para Horas Minutos
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Sex, 13 Jul 2018 12:05 pm
- Anexos
-
- Converter Decimal Horas e Minutos.png (9.34 KiB) Exibido 6147 vezes
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Olá,
ainda ficou confuso qual teu objetivo específico.
Adiantando. As subtrações entre DATAS resulta num numérico que representa o percentual(ou decimal) da quantidade de segundos de um dia.
De outra forma. Um dia possui 86400 segundos. Se a subtração de datas dá 0,5 então este seria metade desse número, ou seja, 43200 segundo do dia.
Pode-se tratar esse numero dividindo e pegando os módulos para pegar segundos, minutos e horas.
Ou de uma forma mais simples pegar uma data e somar a esse decimal que ele mostrará a quantidade de HH:mi:ss que aquele decimal representa.
DATA + DECIMAL.
EX:
Lembrando que usando assim, ele não mostrará diferença em dias, tendo que ser tratado a parte.
ainda ficou confuso qual teu objetivo específico.
Adiantando. As subtrações entre DATAS resulta num numérico que representa o percentual(ou decimal) da quantidade de segundos de um dia.
De outra forma. Um dia possui 86400 segundos. Se a subtração de datas dá 0,5 então este seria metade desse número, ou seja, 43200 segundo do dia.
Pode-se tratar esse numero dividindo e pegando os módulos para pegar segundos, minutos e horas.
Ou de uma forma mais simples pegar uma data e somar a esse decimal que ele mostrará a quantidade de HH:mi:ss que aquele decimal representa.
DATA + DECIMAL.
EX:
SELECT TRUNC(SYSDATE) + 0.5
, TO_CHAR(TRUNC(SYSDATE) + 0.5 , 'HH24:MI:SS') FORM
FROM DUAL
'30/07/2018 12:00:00'
'12:00:00'
Lembrando que usando assim, ele não mostrará diferença em dias, tendo que ser tratado a parte.
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Sex, 13 Jul 2018 12:05 pm
adrianogvs escreveu:Olá DanielNN,
Estou precisando fazer um relatório em que me retorne a diferença de horas, existe duas tabelas com informações diferentes, sendo uma que contem as informações do horários programados e a outra com os horários realizados.
1º Preciso saber como faço para calcular o total programado, sendo o resultado retornando no campo "TOTAL_PROGRAMADO", que é a subtração deHORA_FINAL_PROGRAMADO - HORA_INICIO_PROGRAMADO
.
2º Preciso saber como faço para calcular o total realizado, sendo o resultado retornando no campo "TOTAL_REALIZADO", que é a subtração deHORA_FINAL_REALIZADO - HORA_INICIO_REALIZADO
.
3º Preciso saber como faço para fazer o calculo da diferença, sendo o resultado retornando no campo "DIFERENCA",que é a substração dos camposTOTAL_PROGRAMADO - TOTAL_REALIZADO
.
Segue abaixo Query completa para me ajudar por favor
SELECT CODFUNC, NOMECOMPLETOFUNC, CODINTFUNC, DESCFUNCAO, DATA, TO_CHAR(PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO, 'HH24:MI') AS HORA_INICIO_PROGRAMADO, TO_CHAR(PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO, 'HH24:MI') AS HORA_FINAL_PROGRAMADO, TO_CHAR(PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO, 'HH24:MI') AS HORA_INICIO_REALIZADO, TO_CHAR(PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO, 'HH24:MI') AS HORA_FINAL_REALIZADO, CASE WHEN (PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO) - (PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO) < 0 THEN ((PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO) - (PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO)) * -1 ELSE (PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO) - (PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO) END DIFERENCA, PROGRAMADO_REALIZADO.HORA_FINAL_PROGRAMADO - PROGRAMADO_REALIZADO.HORA_INICIO_PROGRAMADO AS TOTAL_PROGRAMADO, PROGRAMADO_REALIZADO.HORA_FINAL_REALIZADO - PROGRAMADO_REALIZADO.HORA_INICIO_REALIZADO AS TOTAL_REALIZADO FROM (SELECT DISTINCT FLP_FUNCIONARIOS.CODFUNC, FLP_FUNCIONARIOS.NOMECOMPLETOFUNC, FRQ_DIGITACAOMOVIMENTO.CODINTFUNC, FLP_FUNCAO.DESCFUNCAO, TRUNC (TO_DATE(FRQ_DIGITACAOMOVIMENTO.DTDIGIT, 'DD/MM/YYY')) AS DATA, MIN(FRQ_DIGITACAOMOVIMENTO.ENTRADIGIT) AS HORA_INICIO_PROGRAMADO, MAX(FRQ_DIGITACAOMOVIMENTO.SAIDADIGIT) AS HORA_FINAL_PROGRAMADO, REALIZADO.HORA_INICIO_REALIZADO, REALIZADO.HORA_FINAL_REALIZADO FROM FLP_FUNCIONARIOS INNER JOIN FLP_HISTORICOSALARIAL ON FLP_HISTORICOSALARIAL.CODINTFUNC = FLP_FUNCIONARIOS.CODINTFUNC INNER JOIN FLP_FUNCAO ON FLP_FUNCAO.CODFUNCAO = FLP_HISTORICOSALARIAL.CODFUNCAO INNER JOIN FRQ_DIGITACAOMOVIMENTO ON FRQ_DIGITACAOMOVIMENTO.CODINTFUNC = FLP_FUNCIONARIOS.CODINTFUNC INNER JOIN (SELECT DISTINCT FLP_HISTORICOSALARIAL.CODINTFUNC, TRUNC (TO_DATE(FRQ_DIGITACAOMOVIMENTO.DTDIGIT, 'DD/MM/YYY')) AS DATA, MIN(FRQ_DIGITACAOMOVIMENTO.ENTRADIGIT) AS HORA_INICIO_REALIZADO, MAX(FRQ_DIGITACAOMOVIMENTO.SAIDADIGIT) AS HORA_FINAL_REALIZADO FROM FLP_FUNCIONARIOS INNER JOIN FLP_HISTORICOSALARIAL ON FLP_HISTORICOSALARIAL.CODINTFUNC = FLP_FUNCIONARIOS.CODINTFUNC INNER JOIN FLP_FUNCAO ON FLP_FUNCAO.CODFUNCAO = FLP_HISTORICOSALARIAL.CODFUNCAO INNER JOIN FRQ_DIGITACAOMOVIMENTO ON FRQ_DIGITACAOMOVIMENTO.CODINTFUNC = FLP_FUNCIONARIOS.CODINTFUNC WHERE FLP_FUNCIONARIOS.CODINTFUNC = '3378' AND FRQ_DIGITACAOMOVIMENTO.DTDIGIT = TO_DATE('04/06/2018', 'DD/MM/YYYY') AND FRQ_DIGITACAOMOVIMENTO.TIPODIGIT = 'F' GROUP BY FLP_HISTORICOSALARIAL.CODINTFUNC, TRUNC (TO_DATE(FRQ_DIGITACAOMOVIMENTO.DTDIGIT, 'DD/MM/YYY'))) REALIZADO ON REALIZADO.CODINTFUNC = FLP_FUNCIONARIOS.CODINTFUNC WHERE FLP_FUNCIONARIOS.CODINTFUNC = '3378' AND FRQ_DIGITACAOMOVIMENTO.DTDIGIT = TO_DATE('04/06/2018', 'DD/MM/YYYY') AND FRQ_DIGITACAOMOVIMENTO.TIPODIGIT = 'P' GROUP BY FLP_FUNCIONARIOS.CODFUNC, FLP_FUNCIONARIOS.NOMECOMPLETOFUNC, FRQ_DIGITACAOMOVIMENTO.CODINTFUNC, FLP_FUNCAO.DESCFUNCAO, TRUNC (TO_DATE(FRQ_DIGITACAOMOVIMENTO.DTDIGIT, 'DD/MM/YYY')), REALIZADO.HORA_INICIO_REALIZADO, REALIZADO.HORA_FINAL_REALIZADO) PROGRAMADO_REALIZADO;
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Olá Adriano,
Todos esses campos de totais, pelo o que entendi, são subtrações entre datas, que resulta num decimal.
A idéia é sumarizar "SUM()" em cima desse decimal e só depois (como num select acima), converter essa soma de diferenças para formato de Data.
Dá uma olhada em :
http://glufke.net/oracle/viewtopic.php? ... A7a#p32892
e
http://glufke.net/oracle/viewtopic.php? ... A7a#p33353
Qualquer dúvida ainda é só falar.
Todos esses campos de totais, pelo o que entendi, são subtrações entre datas, que resulta num decimal.
A idéia é sumarizar "SUM()" em cima desse decimal e só depois (como num select acima), converter essa soma de diferenças para formato de Data.
Dá uma olhada em :
http://glufke.net/oracle/viewtopic.php? ... A7a#p32892
e
http://glufke.net/oracle/viewtopic.php? ... A7a#p33353
Qualquer dúvida ainda é só falar.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes