| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Qua Out 17, 2012 8:38 pm Assunto: HORA |
|
|
Amigos!
Olha eu novamente!!
tenho um campo em uma tabela no oracle, campo este com as seguintes informação:
31/12/1899 18:00:00 - nome do campo (turno_i) que é turno inicial
o que gostaria de fazer subtrair horário atual com 18:00:00
tentei fazer assim
select to_char(turno_i,'hh24:mm:ss') - to_char(sysdate,'hh24:mm:ss') from tabela
mas não vai, ou quando roda aparece um número maluco.
Alguém pode me ajudar?
Abraços! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Qui Out 18, 2012 12:28 am Assunto: |
|
|
| Aquele Select com o Trunc não deu certo? |
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Qui Out 18, 2012 7:55 am Assunto: Hora |
|
|
Caro amigo Batera!
O select com o Trunc funciona com data atual, mas por exemplo com data default 31/12/1899 18:00:00 traz um número muito alto!
abraços! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Qui Out 18, 2012 1:00 pm Assunto: |
|
|
Fala caro amigo!
Mas fiquei com uma dúvida... por quê você precisa fazer um cálculo com a data default de 1899? |
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Qui Out 18, 2012 6:26 pm Assunto: Hora |
|
|
Amigo, vou tentar explicar, vai que você me sugira outra lógica
Estou desenvolvendo um software para apontamento de Mecanicos (automotivo), então tenho a seguinte estrutura:
Uma tabela que grava os apontamentos e motivo de parada, e outra tabela de turno.
Então na tabela de turno tenho o turno do cara que seria:
código, turno_i, turno_f
onde o turno_i é o turno inicial.
Todo dia quando um mecânico acessa a aplicação, o sistema faz um select na tabela de apontamentos, se o Recorcount for =0 o sistema pega a hora atual (sysdate), e subtrai pela bora inicial de seu turno, para dizer o seguinte: "Você está a x horas parado", justifique o motivo.
Por isso que queria pegar a hora atual e subtrair com o horário de turno dele.
Também usarei este campo para validar se o horário que ele está tentando acessa é de seu turno!
Caro amigo, será que tem uma lógica melhor para eu fazer esta subtração? |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Qui Out 18, 2012 9:40 pm Assunto: |
|
|
| Citação: | | o sistema faz um select na tabela de apontamentos |
Como é esse Select? |
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Sex Out 19, 2012 12:27 am Assunto: |
|
|
Caro Amigo.
O Select abaixo, usei para quando um mecânico finalizar uma ordem de serviço, e por algum motivo, não houve um próximo apontamento, ai quando ele for tentar apontar o sistema usa o select , mas são datas atuais, ou melhor datas do mesmo dia, Abaixo o select que usei e deu certo para esta situação:
select trunc(( (sysdate - (max(fic_hr_fim))) * 86400 / 3600)) ||':' ||
trunc(mod( (sysdate - (max(fic_hr_fim))) * 86400 , 3600 ) / 60 ) || ':'||
trunc(mod ( mod ( (sysdate - (max(fic_hr_fim))) * 86400, 3600 ), 60 ))
as Data from ga_ofi_ficha_mec_itens where cod_func='''+edt1.text+''''
mas para o bendita data defalult não consigo!
Se puder me ajudar agradeço muito! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sex Out 19, 2012 1:06 am Assunto: |
|
|
| Ele funciona com a data atual porque você está utilizando o sysdate. Esse mesmo Select não funcionaria se você substituísse o sysdate pela data que você informasse? |
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Sex Out 19, 2012 9:18 am Assunto: |
|
|
| Isso não seria legal, pois o select roda na criação do form, e é interessante ser o systate pois é a data e hora atual, e o sistema confirma com a tabela o turno do cara! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Out 20, 2012 10:53 am Assunto: |
|
|
Hum, deixa eu entender melhor então...
Vamos supor que eu sou um funcionário e o meu turno começa às 8 horas, ok? Certo dia, eu acessei a aplicação às 9 horas. O sistema vai rodar o Select na inicialização e realizar o cálculo:
| Código: | | 9:00 - 8:00 = 1 hora |
E então a aplicação vai mostrar a mensagem:
| Citação: | | Você está há 1 hora(s) parado, justifique o motivo." |
É isso mesmo? |
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Sáb Out 20, 2012 11:36 am Assunto: |
|
|
Caro amigo, perfeito, é isso mesmo!
Abraços! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Sáb Out 20, 2012 9:06 pm Assunto: |
|
|
Entendi...
Então todos os dias a aplicação vai realizar esse cálculo das horas considerando a hora atual menos o turno inicial, certo?
Só não entendi aonde que a data default entra nessa história... |
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Dom Out 21, 2012 8:24 am Assunto: |
|
|
exatamente isso, o motivo da hora default é que o campo é date, e a data eu não irei usar para nada, apenas a hora!
Abraços! |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
|
| Voltar ao Topo |
|
 |
28440959842 Aprendiz

Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 166
|
Enviada: Dom Out 21, 2012 9:03 pm Assunto: |
|
|
Caro amigo, o Banco é Oracle, mas vou fazer este tratamento diretamente no Delphi, para ver se da certo!
Muito obrigado pela ajuda e paciência!
Abraços!! |
|
| Voltar ao Topo |
|
 |
|