Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2008
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Como determinar Minutos y Segundos Exactos en Firebird????

Como se darán cuenta ando lidiando con los campos TIME en firebird, estoy haciendo un select de los retardos en horas, minutos y segundos de los empleados , pero veo que no me da exacto el dato, por ejemplo, les añado el siguiente Select, donde intento decifrar , cuanto tiempo en Horas y Minutos exacto pudiera tener X empleado:

Código SQL [-]
SELECT C.CVEEMPLEADO,
CASE WHEN
  (Cast('08:00:00' as TIME) - MIN(C.HORA))  / 60 BETWEEN -60 AND -0.01
THEN
  ( (Cast('08:00:00' as TIME) - MIN(C.HORA))  / 60 * (0-1)) ||' Mins.'
ELSE
CASE WHEN
  ((Cast('08:00:00' as TIME) - MIN(C.HORA))  / 60 ) < -60
THEN
  (((Cast('08:00:00' as TIME) - MIN(C.HORA))  / 60 ) / 60 * (0-1) ) ||' Hrs.'
END RETARDO
....

Ejemplo1:
Si la hora de entrada son a las 8am y si X empleado checa a las 08:12:40 am
en la sentencia me desglosa el resultado = >>>> 12.6666 Mins.
en vez de mostrar 12.40 Mins

Ejemplo2:
Si la hora de entrada son a las 8am y si X empleado checa a las 09:40:00 am
en la sentencia me desglosa el resultado = >>>> 1.6777 Hrs.
en vez de mostrar 1.40 Hrs.

Agradezco cualquier sugerencia....
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King
Responder Con Cita
  #2  
Antiguo 20-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por AGAG4 Ver Mensaje
Ejemplo1:
Si la hora de entrada son a las 8am y si X empleado checa a las 08:12:40 am
en la sentencia me desglosa el resultado = >>>> 12.6666 Mins.
en vez de mostrar 12.40 Mins

Ejemplo2:
Si la hora de entrada son a las 8am y si X empleado checa a las 09:40:00 am
en la sentencia me desglosa el resultado = >>>> 1.6777 Hrs.
en vez de mostrar 1.40 Hrs.

Agradezco cualquier sugerencia....
Bueno hay que recordar que las horas son base 60, tal vez por eso tu confusion, no entiendo porque generas un resultado real (12.6666) en lugar del mismo formato de hora (12:40)

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 20-02-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Opino lo mismo que Eliseo, Alfredo. Recuerda que lo normal de cualquier lenguaje de programación (incluyendo SQL), es tomar las operaciones matemáticas de suma, resta, multiplicación y división bajo un esquema de base decimal. No puedes esperar que Firebird convierta el resultado automáticamente a base 60.

Pero dicha conversión no tiene nada de ciencia, puedes hacerla tú mismo con una simple regla de tres. Si a 1 unidad de minuto le corresponden 60 segundos, ¿cuántos segundos corresponden a 0.6666 minutos?

Código:
 1      0.6666
---    -------
60         ?
(0.6666 * 60) / 1

O lo que es lo mismo, 0.6666 * 60 = 39.996 (redondeado, 40 segundos).

Multiplica la fracción de minuto por 60 y obtendrás su representación en segundos. Multiplica la fracción de hora por 60 y obtendrás su representación en minutos.

Espero te sirva de algo.

Saludos.

Al.

Última edición por Al González fecha: 20-02-2008 a las 23:02:24.
Responder Con Cita
  #4  
Antiguo 21-02-2008
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Bueno hay que recordar que las horas son base 60, tal vez por eso tu confusion, no entiendo porque generas un resultado real (12.6666) en lugar del mismo formato de hora (12:40)

Salud OS
En primer lugar egostar, gracias por tu comentario, pero aclaro, YO NO GENERO EL RESULTADO firebird lo devuelve por lo que comenta Al, lo entiendo, solo que esa era mi duda del porque firebird devolvia .666 en vez de los .40, se supone que son campos TIME y no campos Flotantes que no ????, la verdad tengo escasos minutos de usar estos campos de tipo TIME, ignoraba el comportamiento pero ya me estoy familiarizando, por lo que veo todo va a pie en cuanto a resta y sumas de tiempos, tendre que hacer alguna UDF....

Gracias por sus sugerencias, que tengan buen día.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King
Responder Con Cita
  #5  
Antiguo 21-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Las Rfunc no te van a dar el resultado que quieres, pero ayudan bastante.

(En FB2 ya se han implementado algunas de las funciones de rfunc.)

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 21-02-2008
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Las Rfunc no te van a dar el resultado que quieres, pero ayudan bastante.

(En FB2 ya se han implementado algunas de las funciones de rfunc.)

Saludos
Gracias LEPE, encontre unas UDF's que le dan muy buen tratamiento a los campos de tipo TIME, se llaman FreeAdhocUDFmin estas se encuentran en la pagina de www.ibexpert.com
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King
Responder Con Cita
  #7  
Antiguo 21-02-2008
Gabriel Gabriel is offline
Miembro
 
Registrado: may 2003
Ubicación: PalauTordera
Posts: 115
Poder: 21
Gabriel Va por buen camino
Tambien con campos calculados

Código:
procedure TFFullDiariDM.QHoresRCalcFields(DataSet: TDataSet);
var
 TotalMinuts,Hores,Minuts : Integer;
begin
 TotalMinuts := Round(SecondsBetween(QHoresRSurt.AsDateTime,QHoresREntra.AsDateTime)/60);
 Hores := Trunc(TotalMinuts / 60);
 Minuts := Trunc(TotalMinuts mod 60);
 QHoresRHores.AsString := IntToStr(Hores) + ':' + FormatFloat('00',Minuts);
end;
Saludos
__________________
Gabriel
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Es posible determinar si el servicio del firebird se esta ejecutando? Ricardo León Conexión con bases de datos 1 18-09-2007 18:35:27
Como determinar la ip de un pc JoeyJordison Varios 1 14-01-2007 18:13:06
Trabajar con angulos (grados, minutos, segundos) onlytk Varios 6 15-11-2005 23:49:33
como determinar el navegador por defecto Velia API de Windows 4 13-11-2005 16:54:10
minutos y segundos con Tmediaplayer Pepetrueno Varios 2 25-06-2003 22:07:48


La franja horaria es GMT +2. Ahora son las 23:23:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi