PDA

Ver la Versión Completa : Problemas al restar campos timestamp en Proc. Almacenado


Choclito
04-02-2005, 13:56:27
Hola amigos del foro, nuevamente les pido su muy valiosa ayuda esta vez el problema q tengo es el siguiente
Quiero hacer el registro del tiempo que utiliza un determinado usuario del sistema q ya desarrolle, para eso tengo una tabla
bitacora (
login varchar (15),
fecha_ingreso timestamp,
fecha_salida timestamp,
duracion timestamp,
activo char (1))
donde login es llave foranea, primero hice un proc almacenado para registrar al usuario y la fecha hora que ingresa el problema q tengo es q hice otro pra registrar a que hora sale del sistema y para eso hice lo siguiente:
/*En Ibexpert*/
begin
select b.login
from bitacora b
where (( b.login=:login))into :log;
if (:log is not null) then
begin
update bitacora set
bitacora.fecha_salida=current_timestamp,
bitacora.duracion=cast (current_timestamp-bitacora.fecha_ingreso as timestamp),
bitacora.estado='D'
where (( bitacora.login=:log) and (bitacora.estado='A'));
end
end

pues bien ejecutando el proc almacenado me sale el siguiente error:

Overflow occurred during data type conversion.
conversion error from string "3.263009259".

Ahora nose en que estoy errando o talves es en definir como char o como varchar el campo duracion, o la definicion de los campos fecha_ingreso y fecha_salida pero al hacer me sale de igual forma el error

Me gustaria q el resultado me salga algo asi como :
2:33:12 que indique 2 horas 33 minutos y 12 segundos

Antetodo muchas gracias por la ayuda que me brinden, o talves lo que hice esta mal asi y si fuese asi quisiera porfavor que me indicen otra forma de realizar lo que quiero hacer
Nuevamente muchas gracias por la ayuda que me brinden

Choclito
12-02-2005, 01:41:42
nuevamente saludo a todos los del foro y les pido que me den una pauta hasta ahora hago q en una consulta me muetre la diferencia de fecha inicio y fecha final pero el detalle es que esa diferencia quisiera guardarlo en un campo de mi tabla y mi duda es como tengo q definir ese campo (varchar,timestamp,date,time:confused:) y otra duda q tengo es como hago para q esa diferencia de por ejemplo hora inicio 14:30 hora final 14:45 me salga 0:15 bueno porfavor espero su muy valiosa ayuda

crasv
12-02-2005, 02:10:43
Hola.

Podrias trabajar almacenando la horas en campos varchar y la siguiente funcion te arrojaria los minutos para que luego los conviertas como quieras.

el formato de hora debe ser HH:mm

hora1,hora2 serian varchar(15)

minutos seria integer

minutos = ((cast(substr(hora2,1,2) as integer)*60)+
(cast(substr(hora2,4,2) as integer)))-
(cast(substr(hora1,1,2) as integer)+(cast(substr(hora1,4,2) as integer*60)))