Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/08/2011, 09:07
mksp
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Campo smallint en hora

Muchisimas gracias por su pronta respuesta.. Aqui va el query como lo tengo:

SELECT OSCL.callID, OSCL.customer, OSCL.custmrName, OSCL.createDate,
(
case
when (OSCL.createTime)=0
then '00' + LEFT(OSCL.createTime,0)+':'+'0'+RIGHT(OSCL.createT ime,1)
when LEN(OSCL.createTime)=1
then '000' + LEFT(OSCL.createTime,00)+':'+'0'+RIGHT(OSCL.create Time,1)
when LEN(OSCL.createTime)=2
then '00' + LEFT(OSCL.createTime,0)+':'+RIGHT(OSCL.createTime, 2)
when LEN(OSCL.createTime)=3
then '0' + LEFT(OSCL.createTime,1)+':'+RIGHT(OSCL.createTime, 2)
when LEN(OSCL.createTime)=4
then LEFT(OSCL.createTime,2)+':'+RIGHT(OSCL.createTime, 2)
end
) as createTime,

OSCL.closeDate,OCLG.ClgCode, OCLG.Recontact, OCLG.U_Tecnico1, OCLG.U_Tipo_Mant, OCLG.U_FechaAtenc,
(
case
when (OCLG.U_TimeViaje)=0
then '00' + LEFT(OCLG.U_TimeViaje,0)+':'+'0'+RIGHT(OCLG.U_Time Viaje,1)
when LEN(OCLG.U_TimeViaje)=1
then '000' + LEFT(OCLG.U_TimeViaje,00)+':'+'0'+RIGHT(OCLG.U_Tim eViaje,1)
when LEN(OCLG.U_TimeViaje)=2
then '00' + LEFT(OCLG.U_TimeViaje,0)+':'+RIGHT(OCLG.U_TimeViaj e,2)
when LEN(OCLG.U_TimeViaje)=3
then '0' + LEFT(OCLG.U_TimeViaje,1)+':'+RIGHT(OCLG.U_TimeViaj e,2)
when LEN(OCLG.U_TimeViaje)=4
then LEFT(OCLG.U_TimeViaje,2)+':'+RIGHT(OCLG.U_TimeViaj e,2)
end
) as U_TimeViaje,
(
case
when (OCLG.U_HoraLleg)=0
then '00' + LEFT(OCLG.U_HoraLleg,0)+':'+'0'+RIGHT(OCLG.U_HoraL leg,1)
when LEN(OCLG.U_HoraLleg)=1
then '000' + LEFT(OCLG.U_HoraLleg,00)+':'+'0'+RIGHT(OCLG.U_Hora Lleg,1)
when LEN(OCLG.U_HoraLleg)=2
then '00' + LEFT(OCLG.U_HoraLleg,0)+':'+RIGHT(OCLG.U_HoraLleg, 2)
when LEN(OCLG.U_HoraLleg)=3
then '0' + LEFT(OCLG.U_HoraLleg,1)+':'+RIGHT(OCLG.U_HoraLleg, 2)
when LEN(OCLG.U_HoraLleg)=4
then LEFT(OCLG.U_HoraLleg,2)+':'+RIGHT(OCLG.U_HoraLleg, 2)
end
) as U_HoraLleg,
(
case
when (OCLG.U_HoraIniAten)=0
then '00' + LEFT(OCLG.U_HoraIniAten,0)+':'+'0'+RIGHT(OCLG.U_Ho raIniAten,1)
when LEN(OCLG.U_HoraIniAten)=1
then '000' + LEFT(OCLG.U_HoraIniAten,00)+':'+'0'+RIGHT(OCLG.U_H oraIniAten,1)
when LEN(OCLG.U_HoraIniAten)=2
then '00' + LEFT(OCLG.U_HoraIniAten,0)+':'+RIGHT(OCLG.U_HoraIn iAten,2)
when LEN(OCLG.U_HoraIniAten)=3
then '0' + LEFT(OCLG.U_HoraIniAten,1)+':'+RIGHT(OCLG.U_HoraIn iAten,2)
when LEN(OCLG.U_HoraIniAten)=4
then LEFT(OCLG.U_HoraIniAten,2)+':'+RIGHT(OCLG.U_HoraIn iAten,2)
end
) as U_HoraIniAten,
(
case
when (OCLG.U_HoraFinAten)=0
then '00' + LEFT(OCLG.U_HoraFinAten,0)+':'+'0'+RIGHT(OCLG.U_Ho raFinAten,1)
when LEN(OCLG.U_HoraFinAten)=1
then '000' + LEFT(OCLG.U_HoraFinAten,00)+':'+'0'+RIGHT(OCLG.U_H oraFinAten,1)
when LEN(OCLG.U_HoraFinAten)=2
then '00' + LEFT(OCLG.U_HoraFinAten,0)+':'+RIGHT(OCLG.U_HoraFi nAten,2)
when LEN(OCLG.U_HoraFinAten)=3
then '0' + LEFT(OCLG.U_HoraFinAten,1)+':'+RIGHT(OCLG.U_HoraFi nAten,2)
when LEN(OCLG.U_HoraFinAten)=4
then LEFT(OCLG.U_HoraFinAten,2)+':'+RIGHT(OCLG.U_HoraFi nAten,2)
end
) as U_HoraFinAten,

(u_timeviaje+(u_horafinaten-u_horalleg)) as tiempoactividad

FROM OSCL INNER JOIN
OCLG ON OSCL.callID = OCLG.parentId AND OSCL.objType = OCLG.parentType


ORDER BY OCLG.U_Tecnico1, OCLG.Recontact


Los campos que estan dentro de los CASE son las horas que tengo que hacerle la operacion (u_timeviaje+(u_horafinaten-u_horalleg)) as tiempoactividad, los rellene con 0 y agregue los : para que parecieran las fechas. Ahora cuando aplique mi formula (u_timeviaje+(u_horafinaten-u_horalleg)) as tiempoactividad
el calculo no lo hace bien cuando son horas exactas 14:00 no lo calcula bien por el hecho de que tendria que restarle 60. Un ejemplo practico para que entiendan de que no me da correctamente es:

Formula: (u_timeviaje+(u_horafinaten-u_horalleg)) as tiempoactividad
u_timeviaje=00:40
u_horafinaten=12:40
u_horalleg=12:20
(00:40+(12:40-12:20))=00:40+00:20=00:60 que deberia mostrar 1:00 y otro caso es
u_timeviaje=08:00
u_horafinaten=18:00
u_horalleg=12:17
(08:00+(18:00-12:17))=08:00+05:83=13:83 cuando deberia mostrar 13:43

Aqui es donde ando estancada, de antemano muchisimas gracias, espero que me puedan orientar.