Gravar campos data/hora e soma de horas

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
emferrari
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Mar 2005 11:57 am
Localização: CURITIBA - PR
Contato:

Olá pessoal

Seguinte. Estou desenvolvendo uma aplicação para lançar as atividades dos programadores.

Esse programa é baseado na seguinte tabela:

Selecionar tudo

COD_SOLICITACAO  NUMBER(10)
NUM_SEQ          NUMBER(10)
COD_PESSOA       NUMBER(5)
HRA_INICIAL      DATE
HRA_FINAL        DATE
DTA_ATIVIDADE    DATE
Na minha tela eu mostro os campos DTA_ATIVIDADE, HRA_INICIAL e HRA_FINAL. Os campos tem os datatypes e format masks: DD/MM/RRRR, HH24:MI respectivamente, ou seja, os campos HRA_INICIAL e HRA_FINAL só é lançado a hora de inicio e fim da atividade. Na hora que é feito o commit ele grava no BD o seguinte: 01/03/2005 09:30 se você inserir somente 09:30 no campo HRA_INICIAL. :?

Alguém sabe me dizer como resolver isso ?

Também quero saber como fazer cálculo entre horas, para saber por exemplo quantas horas a pessoa 1 fez no mês.

Obrigado!

Eduardo Ferrari
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

Olá ferrari

O ideal era você gravar a DATA/HORA nos campos de inicio e fim, pois digamos que o usuário começou uma atividade ontem as 16:00 e terminou hoje as 10:00.

Por isso, é interessante colocar sempre data e hora nos campos data.
Para descobrir a as horas de um perído, basta subtrair a maior data com a menor...

Qualquer dúvida, dá um toque!!!
emferrari
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Mar 2005 11:57 am
Localização: CURITIBA - PR
Contato:

Pois é, você tem razão, vou modificar o programa.

Outra coisa, se eu subtrair ele vai transformar em número, esse que é o meu problema. Dai tenho que ficar convertendo e tal.

Abraços!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

Esse número que retornar é em DIAS. Exemplo:
Se retornar .5 -> significa que é metade de um dia, ou seja 12 horas.

Por isso é só você multiplicar esse número pra ter em outros formatos:
Se você quiser em HORAS, é só multiplicar por 24.
Se você quiser em MINUTOS é só multiplicar por 24*60
Se você quiser em SEGUNDOS é só multiplicar por 24*60*60

Boa sorte!!!
emferrari
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 30 Mar 2005 11:57 am
Localização: CURITIBA - PR
Contato:

Sim eu sei disso.

Porém olhe a situação:

A pessoa X levou 12 horas e 15 minutos
A pessoa Y levou 12 horas e 30 minutos
A pessoa Z levou 1 hora e 30 minutos

daria um total de 25:15:00. Como chegar a esse valor ?

Da maneira que eu pensei só desmembrando, convertendo para varchar2 e colocar na tela nesse formato. Mas dai vai dar uma mão para fazer.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

Bem, pra somar HORAS, a melhor forma é converter as horas pra DIAS.
Exemplo:
6 horas = .25 dia
12 horas = .5 dia
etc...

Veja esse exemplo:

Selecionar tudo

SQL> select
  2    --hh          -mm
  3     (12  /24) +  (15  /24/60)  -- 12:15
  4  +  (12  /24) +  (30  /24/60)  -- 12:30
  5  +  ( 1  /24) +  (15  /24/60) d-- 01:15 
  6  from dual
  7  /

         D
----------
1.08333333

1 row selected.

SQL> 
Como você pode ver a soma das suas horas deu um pouco mais de um dia.
Agora, basta pegar o valor INTEIRO e multiplicar por 24 (pra saber o número de horas cheia) e depois, multiplicar o resto por 60*24 pra ter os minutos.
É claro, vai precisar de uma rotina que faça isso. Pois pode sobrar uma hora CHEIA nos decimais...
Responder
  • Informação
  • Quem está online

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