Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2008
Avatar de Gaim2205
Gaim2205 Gaim2205 is offline
Miembro
 
Registrado: ago 2007
Ubicación: Durango, Mexico
Posts: 144
Poder: 17
Gaim2205 Va por buen camino
sql server entero a time

Hola amigos, tengo una tabla donde se almacenan horarios de entrada y salida de trabajadores y quiero hacer una simple resta hora de entrada - hora de salida. El problema es que estos datos estan almacenados en campos de tipo entero por lo que una resta, por ejemplo:

19.00 - 8.20 = 10.8

y lo que yo quiero es obviamente que me devuelva en formato tiempo.

19.00 - 8.20 = 10.40 (diez horas, cuarenta minutos)

como puedo hacer esto con instrucciones sql en sql server 2000??
Muchas Gracias...
Responder Con Cita
  #2  
Antiguo 05-06-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 24
BlueSteel Va por buen camino
Cool

Cita:
Empezado por Gaim2205 Ver Mensaje
Hola amigos, tengo una tabla donde se almacenan horarios de entrada y salida de trabajadores y quiero hacer una simple resta hora de entrada - hora de salida. El problema es que estos datos estan almacenados en campos de tipo entero por lo que una resta, por ejemplo:

19.00 - 8.20 = 10.8

y lo que yo quiero es obviamente que me devuelva en formato tiempo.

19.00 - 8.20 = 10.40 (diez horas, cuarenta minutos)

como puedo hacer esto con instrucciones sql en sql server 2000??
Muchas Gracias...
Creo que debes convertir el entero a tipo hora... y realizar la resta de las horas con algun parametro

Yo lo que realizo es almacenar la fecha y hora en un mismo campo....si bien los datos que me llegan de la captura son de tipo string y entero, los transformo de la sgte forma

Con la siguiente funcion convierto los datos que vienen así

Fecha : 20080605
Hora :1341

a esto '06/06/2008 13:41:00'

Código Delphi [-]
     cYear   := StrToInt(Copy(DTexto.FieldByName('Fecha').asString,1,4));
     cMes    := StrToInt(Copy(DTexto.FieldByName('Fecha').asString,5,2));
     cDia    := StrToInt(Copy(DTexto.FieldByName('Fecha').asString,7,2));
     cHora   := StrToInt(Copy(DTexto.FieldByName('Hora').asString,1,2));
     cMinuto := StrToInt(Copy(DTexto.FieldByName('Hora').asString,3,2));
     cFecha := encodedate(cYear, cMes, cDia);
     cTime := encodetime(cHora, cMinuto, 0, 0);
     ReplaceTime(cFecha, cTime);

desde SQL utilizo lo siguiente para separar la fecha y la hora del campo Fecha (Acuerdate que la fecha y la hora estan en el mismo campo)

Código SQL [-]
 
CONVERT(Char(10), Hor_Fecha, 103) As Fecha
CONVERT(Char(8), Hor_Fecha, 108) As Hora'
en delphi puedes utilizar esto
Código Delphi [-]
MinutesBetween(Sal2,Ent2)
lo que te devolverá la cantidad de minutos que hay entre 2 horas (despues realizas el calculo de cuantas horas y minutos corresponderian...

Bueno, espero que esto te sirva.. o al menos te oriente

Salu2
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 05-06-2008
Avatar de Gaim2205
Gaim2205 Gaim2205 is offline
Miembro
 
Registrado: ago 2007
Ubicación: Durango, Mexico
Posts: 144
Poder: 17
Gaim2205 Va por buen camino
Hola, gracias por tu respuesta, lamentablemente estas tablas se han venido utilizando desde mucho antes que yo llegara aqui, y como mencioné en mi post anterior las horas de entrada y salida se almacenan en campos de tipo entero, la fecha esta almacenada en un campo aparte.

Algo que seria facil, aunque no se si exista es un cast que convierta mi entero 10.2 por ejemplo, a 10:20:00 (formato time, sin date)

Con esto ya podria yo realizar la resta entre 2 times. Espero haberme dado a entender, recordar que quiero hacerlo solo mediante SQL, sin involucrar delphi por el momento.

Edito: Lo pense, y si me interesa tambien saber como convertir un dato decimal (hasta ahora habia dicho entero y puesto ejemplos con decimales duuuh, disculpen ustedes) a la parte time de un campo datetime . Espero haberme dado a entender y muchas gracias...

Última edición por Gaim2205 fecha: 05-06-2008 a las 19:56:30.
Responder Con Cita
  #4  
Antiguo 05-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Código SQL [-]
-- =============================================
-- Create scalar function (FN)
-- =============================================
IF EXISTS (SELECT * 
     FROM   sysobjects 
     WHERE  name = N'')
  DROP FUNCTION CalculaTiempo
GO

CREATE FUNCTION CalculaTiempo(@ValHoraIni as Numeric(4,2), @ValHoraFin as Numeric(4,2))
RETURNS Char(8)
AS
BEGIN


Declare
   @HorIni Integer,
   @MinIni Integer,
   @HorFin Integer,
   @MinFin Integer,
   @TimeIni DateTime,
   @TimeFin DateTime

   Set @HorIni  = ROUND(@ValHoraIni, 0, 1)
   Set @MinIni = (@ValHoraIni - @HorIni) * 100

   Set @HorFin  = ROUND(@ValHoraFin, 0, 1)
   Set @MinFin = (@ValHoraFin - @HorFin) * 100
   Set @TimeIni = Convert(Datetime,'2008-01-01 '+ Cast(@HorIni As Char(2)) + ':' + Cast(@MinIni As Char(2)) + ':00.00',121)
   Set @TimeFin = Convert(Datetime,'2008-01-01 '+ Cast(@HorFin As Char(2)) + ':' + Cast(@MinFin As Char(2)) + ':00.00',121)


   Set @HorIni = Round(DateDiff(mi,@TimeIni, @TimeFin) / 60.0,0,1)
   Set @MinIni = DateDiff(mi,@TimeIni, @TimeFin) - (@HorIni*60)  

   RETURN  Case When @HorIni < 10 Then '0' Else '' End + RTrim(Cast(@HorIni As Char(2))) + ':' + 
           Case When @MinIni < 10 Then '0' Else '' End + RTrim(Cast(@MinIni As Char(2))) + ':00'

END


Código SQL [-]
 
  Select  Database.Dbo.CalculaTiempo(10.40,18.55) As Tiempo
__________________
Conoce mi blog http://www.edgartec.com

Última edición por poliburro fecha: 05-06-2008 a las 23:21:01. Razón: error
Responder Con Cita
  #5  
Antiguo 05-06-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
amigo poliburro, otra vez estoy con cara de
interesante procedimiento...

no me termina de cuadrar:
Cita:
Empezado por Gaim2205 Ver Mensaje
...un cast que convierta mi entero 10.2 por ejemplo, a 10:20:00 (formato time, sin date) ...
¿desde cuando 10.2 es un entero?

Ten cuidado porque 10.2 no es 10 horas, 20 minutos.
Por ejemplo: 10.5 no son 10 horas, 50 minutos, son 10 horas, 30 minutos.
__________________

Responder Con Cita
  #6  
Antiguo 05-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por ContraVeneno Ver Mensaje
amigo poliburro, otra vez estoy con cara de
interesante procedimiento...

no me termina de cuadrar:


¿desde cuando 10.2 es un entero?

Ten cuidado porque 10.2 no es 10 horas, 20 minutos.
Por ejemplo: 10.5 no son 10 horas, 50 minutos, son 10 horas, 30 minutos.
Tienes razón, pero por la manera en que el compañero hizo el cálculo de tiempo en su primer post imagino que está manejado los enteros para horas y decimales para minutos, por lo tanto el número máximo que tendrá un decimal con su criterio es 59.

:P bueno eso entendí jajaja ya nos lo aclarará el compañero
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #7  
Antiguo 05-06-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 24
BlueSteel Va por buen camino
Buena función poliburro...

la dejaré anotada, al menos me sirve gran parte de ella

Salu2
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 05-06-2008
Avatar de Gaim2205
Gaim2205 Gaim2205 is offline
Miembro
 
Registrado: ago 2007
Ubicación: Durango, Mexico
Posts: 144
Poder: 17
Gaim2205 Va por buen camino
Asi es, poliburro entendió muy bien, con 10.20 me referia a 10 horas 20 minutos... Lo que 10.20 era un entero lo aclare en mi post anterior dedicandome a mi mismo un merecido duuuuuuuuh

y poliburro disculpa pero esto es un poco avanzado para mi.. cualquier combinacion de horas que ingrese a la funcion me da siempre el mismo resultado (06:25:00). Tal vez estoy haciendo algo mal.

si no es mucha molestia me la podrias explicar un poco, como funciona, para asi poder adaptarla yo a mis necesidades. Muchas gracias.

Última edición por Gaim2205 fecha: 05-06-2008 a las 22:51:55.
Responder Con Cita
  #9  
Antiguo 05-06-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
¿cambiaste el 10.40 y el 16.55 o solo hiciste "copiar y pegar"?
__________________

Responder Con Cita
  #10  
Antiguo 05-06-2008
Avatar de Gaim2205
Gaim2205 Gaim2205 is offline
Miembro
 
Registrado: ago 2007
Ubicación: Durango, Mexico
Posts: 144
Poder: 17
Gaim2205 Va por buen camino
ok me volvi a explicar mal, quiero decir que con los valores que ingreso poliburro a la funcion 16.55 - 10.40 el resultado seria

6:15 no??.. donde quedaron los otros 10 minutos?
cuando trato con 16.45 - 10.00 me da como resultado 06:75:00

por eso pido de favor, si tienen tiempo explicar un poco la funcion para poder yo adaptarla ya que no me esta dando los resultados deseados, y como tambien dije antes, puede ser que esté haciendo algo mal yo.

Gracias.
Responder Con Cita
  #11  
Antiguo 05-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Gaim2205 Ver Mensaje
y poliburro disculpa pero esto es un poco avanzado para mi.. cualquier combinacion de horas que ingrese a la funcion me da siempre el mismo resultado (06:25:00). Tal vez estoy haciendo algo mal.
tienes razón, ya corregí la función en el post inicial, vuelve a copiarla y compilarla ya debe funcionar.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #12  
Antiguo 05-06-2008
Avatar de Gaim2205
Gaim2205 Gaim2205 is offline
Miembro
 
Registrado: ago 2007
Ubicación: Durango, Mexico
Posts: 144
Poder: 17
Gaim2205 Va por buen camino
poliburro podrias leer el post #10 de este hilo, como menciono el problema no era sustituir las horas con los parametros @ValHoraIni o @ValHoraFin, eso si lo hice desde un principio. Pero los resultados aun son un poco extraños, como 16.45 - 10.00 = 06:75:00

espero no ser mucha molestia pero trato de entender los calculos que hiciste y hacer modificaciones pero no he podido llegar a un buen resultado.
Responder Con Cita
  #13  
Antiguo 05-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Gaim2205 Ver Mensaje
espero no ser mucha molestia pero trato de entender los calculos que hiciste y hacer modificaciones pero no he podido llegar a un buen resultado.
Si checas bien el código actual tiene dos correcciones más :P, por favor vuelve a copiarlo y compilarlo en tu motor y pruebalo nuevamente. A mi me está funcionando bien
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #14  
Antiguo 05-06-2008
Avatar de Gaim2205
Gaim2205 Gaim2205 is offline
Miembro
 
Registrado: ago 2007
Ubicación: Durango, Mexico
Posts: 144
Poder: 17
Gaim2205 Va por buen camino
excelente, muchas gracias a todos.
Responder Con Cita
  #15  
Antiguo 07-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Gaim2205 Ver Mensaje
excelente, muchas gracias a todos.
Amigo es un gusto ayudar, y si tienes más consultas, psss echalas echalas aca les echamos montón :P


saludos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #16  
Antiguo 07-06-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
míralo, míralo, siempre de golosote

__________________

Responder Con Cita
  #17  
Antiguo 07-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por ContraVeneno Ver Mensaje
míralo, míralo, siempre de golosote



Bueno bueno, es que el apetito no se apacigua, que le hacemos? jajajaja
__________________
Conoce mi blog http://www.edgartec.com
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
Time Server Indy pablonill Servers 0 02-04-2008 14:19:52
Lock time out SQL Server connection timed out delphisenda Varios 2 20-09-2007 21:23:07
Crear dll para un programa del que no tengo entero el código fuente entero seduerey Varios 1 02-05-2007 13:58:08
Obtener el time y date del server... uper Firebird e Interbase 1 11-03-2005 15:49:12
De entero a hexa, y hexa a entero (o string) emeceuy Varios 5 02-06-2004 18:23:13


La franja horaria es GMT +2. Ahora son las 06:04:31.


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