cancel
Showing results for 
Search instead for 
Did you mean: 

Diferencia entre 2 campos de hora

Former Member
0 Kudos

Que tal expertos!!!

Me encuentro intentando sacar la diferencia entre dos campos de hora y no me checa el resulta que me arroja.

Mi consulta es:

select DATEDIFF(hh,U_horas,U_hora) from OINV where DocNum = 236

donde U_horas son las: 11:00am y U_hora son las 02:00pm

el resultado que espero sería 3 (3 horas) pero obtengo 9600.

Ambos son campos de usuario creados de tipo hora, la hora se le pone durante el mismo día.

No se si existe otra función ademas de DATEDIFF que me saque la diferencia.

De antemano gracias!!

Saludos!!!

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Tienes razón, intenta con esta:

Select Cast(Substring(Cast(U_Horas As Nvarchar(500)), 1, 2) as Int) - Cast(Substring(Cast(U_Hora As Nvarchar(500)), 1, 2) as int)

from OINV

where DocNum = 236

Former Member
0 Kudos

Excelente, gracias!!!! ese sí me arroja las 3 horas de diferencia.

Solo que voy a tener que agregarle un CASE para cuando la hora sea antes de las 10:00 am.

Ya que cuando la hora son de 3 dígitos (de la 1:00am a las 9:59am) causa conflicto.

Me imagino que es jugar con la parte del

Cast(U_Horas As Nvarchar(500)), 1, 2) as Int

                                                  ^   ^

Former Member
0 Kudos

Exactamente, me alegra que te sirva!!!

Saludos,

Answers (3)

Answers (3)

Former Member
0 Kudos

Opte por hacer mejor el formato en crystal reports.

Usando las siguientes formulas:

Para las diferencias en horas

DateDiff("h",CDateTime(Date({Comando.docdate}),Time({Comando.u_horaini})),

CDateTime(Date({Comando.docdate}),Time({Comando.u_horafin})))

Para el sobrante en minutos

({@nl} mod 3600)/60

Donde @nl es otro campo de formula con la diferencia en segundo:

(DateDiff("n",CDateTime(Date({Comando.docdate}),Time({Comando.u_horaini})),

CDateTime(Date({Comando.docdate}),Time({Comando.u_horafin}))))*60

Saludos!!!

Former Member
0 Kudos

Hola Antonio,

Si los campos los creaste de tipo hora SAP Business One los crea en realidad cómo campos de cadena, de ahí que al hacer tu operación matemática no te genere datos coherentes.

Si únicamente quieres sacar la diferencia entre horas, podrías trabajarlas en formato de 24 horas (14:00 y 11:00) de modo que te sea posible interactuar con las cadenas utilizando un substring de una hora y de la otra y tomando los valores de forma numerica para operarlos correctamente, más o menos así:

Select Cast(Substring(U_Horas, 1, 2) As Int) - Cast(Substring(U_Hora, 1, 2) As Int)

from OINV

where DocNum = 236 

Si ya lo quieres más exacto tendría que jugarse también con los minutos determinado si en efecto ya se cumplió o no la hora.

Saludos,

Former Member
0 Kudos

Que tal Andres

Muchas gracias por tu respuesta, aplique tu query con mis campos de usurio de tipo hora de las 11:00 a las 14:00 y me arroja el siguiente error:

Argument data type smallint is invalid for argument 1 of substring function.

Intente cambiar las variables por smallint, pero sigue arrojando el mismo error.

=S

Saludos!


Former Member
0 Kudos

Lo que pasa es que con datediff tienes que incluir el día de la sig manera '20120927 12:00:00'

Former Member
0 Kudos

Así es, y el problema es que al crear un campo de usuario, puedes hacerlo de solo fecha o solo hora.

Por lo tanto se vuelve dificil saber como usar el datediff.

Hay una funcion que se llama timediff pero al parecer no la tiene el SQL Server, pero debe de haber otra forma para cubrir esa funsion