PDA

Ver la Versión Completa : Restando Horas....


BPL
22-12-2011, 19:24:12
hola a todos....

tengo dos campo de tipo Date en donde guardo Fecha y otros dos de Tipo Character en donde guardo la Hora..

necesito restar (hora1 ) - (Hora2)

pero cuando estamos hablando que la hora1 = 22:00 pm (del dia 15/12/2011) y la hora2 = 02:00 am (del dia 16/12/2011) y resto me sale un disparate.
para evitar este problema debo unir (fecha1 hora1)-(fecha2 hora2).
esto me resultaba cuando estaba trabajando con otra version del Motor (Advantage 8.0) pero ahora se cambio la version
y ya no me resulta se cae... (ahora es Advanteg 8.1) programo con delphi...

las lineas de programacion es esta.,...

SELECT TIMESTAMPDIFF(SQL_TSI_Minute,convert(convert(Fecha1,SQL_CHAR)+' '+Hora1,SQL_TIMESTAMP),convert(convert(fecha2,SQL_CHAR)+' '+Hora2,SQL_TIMESTAMP))
FROM CP_MOVIMIENTO

ojala alguien pueda ayudarme....

gracias.....

Casimiro Notevi
22-12-2011, 19:56:04
Recuerda usar etiquetas para el código, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

En relación a tu pregunta, no he entendido bien cual es el problema que tienes, aparte de resultarme raro que guardes 'horas' en formato texto.

duilioisola
23-12-2011, 17:50:30
No conozco ese motor de base de datos, pero si dieras el mensaje de error que te da quizás alguna búsqueda en San Google te pueda ayudar.

De todos modos, veo que estás haciendo una conversión de fecha a string. Luego lo concatenas con la hora y vuelta a convertir a fecha.

Te sugiero que rompas el problema en varios trozos y pruebes dónde está el error... por eso de "divide y vencerás"...

Empiezas por:

/* Se supone que devuelve dos fechas y dos strings */
SELECT Fecha1, Hora1, fecha2, Hora2
FROM CP_MOVIMIENTO

Ves lo que devuelve y si es correcto sigues.
Aquí puede ser que el formato de la hora no sea correcto... o que tenga nulos o que tenga letras o que ponga la hora 25:73...


/* Se supone que devuelve dos strings */
SELECT convert(Fecha1,SQL_CHAR), convert(fecha2,SQL_CHAR)
FROM CP_MOVIMIENTO

Ves lo que devuelve y si es correcto sigues:


/* Se supone que devuelve dos fechas con hora */
SELECT convert(convert(Fecha1,SQL_CHAR)+' '+Hora1,SQL_TIMESTAMP), convert(convert(fecha2,SQL_CHAR)+' '+Hora2,SQL_TIMESTAMP)
FROM CP_MOVIMIENTO

Ves lo que devuelve y si es correcto sigues:


/* Se supone que devuelve la diferencia en minutos entre las dos fechas con hora */
SELECT TIMESTAMPDIFF(SQL_TSI_Minute, convert(convert(Fecha1,SQL_CHAR)+' '+Hora1,SQL_TIMESTAMP), convert(convert(fecha2,SQL_CHAR)+' '+Hora2,SQL_TIMESTAMP))
FROM CP_MOVIMIENTO

Ves lo que devuelve y si es correcto es que el problema no está en el SQL.