Fórum Não sei como oter total de horas de um determinao período em sql. Alguém pode me ajudar? #418767
20/06/2012
0
Tenho os capos:
- Data
- Batida1
- Batida2
- Batida3
- Batida4
A Data é do tipo date e os campos batida1,2,3 e 4 são varchar(5), no banco o formato é 99:99.
Precisaria do total de horas em uma determinada data, tem como?
Emir Neto
Curtir tópico
+ 0Posts
20/06/2012
William
Gostei + 0
20/06/2012
Emir Neto
Gostei + 0
20/06/2012
Joel Rodrigues
Enfim, tenta fazer um cast nos campos, convertendo-os para TIME/TIMESTAMP e somando-os.
Gostei + 0
20/06/2012
Emir Neto
Gostei + 0
21/06/2012
Gustavo Bretas
Eu não estou com o firebird aqui para fazer o teste pra vc, e não lembro quais o tipos para datas dele, mas faz o seguinte teste:
cast(batida2 as datetime) - cast(batida1 as datetime)
Se o tipo não for datetime, substitua pelo tipo que existe no firebird!
Gostei + 0
21/06/2012
Deivison Melo
Veja se isso ajudará vc!
Essa procedure faz parte de um artigo sobre tipos date e time escrito por mim e publicado na revista ClubeDelphi #48 que também traz toda a explicação de como a procedure funciona
CREATE PROCEDURE INFO_PERIODO (
INICIO TIMESTAMP,
FIM TIMESTAMP)
RETURNS (
DIAS INTEGER,
HORAS INTEGER,
MINUTOS INTEGER,
SEGUNDOS INTEGER)
AS
DECLARE VARIABLE TEMP NUMERIC(18,7);
BEGIN
/* Inicializa variáveis */
dias = 0; horas = 0; minutos = 0; segundos = 0;
/* Temp armazena a diferenca do periodo, em dias e frações de dias */
temp = (fim - inicio);
/* Pega o numero de dias - parte inteira */
if (temp > 0) then dias = temp - 0.5; else dias = temp;
/* extraí os dias do timestamp, deixando apenas hora/min/seg */
temp = temp - dias;
/* Um dia tem 86.400 segundos, assim transformamos o valor
que temos em total em segundos */
temp = temp * 86400;
horas = (temp / 3600); /* Uma hora tem 3.600 segundos */
if (horas > 0) then horas = horas - 0.5;
temp = temp - (horas*3600); /* Temp vale agora minutos e segundos */
minutos = (temp / 60); /* Um minuto tem 60 segundos */
if (minutos > 0) then minutos = minutos - 0.5;
segundos = temp - (minutos * 60); /* Para finalizar extrai os segundos */
END
Crédidos: Firebase.com.br
Qualquer coisa me fala que vemos uma outra solução que possa atender vc!!
Gostei + 0
21/06/2012
Deivison Melo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)