Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Restando Horas.... (https://www.clubdelphi.com/foros/showthread.php?t=77118)

BPL 22-12-2011 19:24:12

Restando Horas....
 
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 Noteví 22-12-2011 19:56:04

Recuerda usar etiquetas para el código, ejemplo:



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:
Código SQL [-]
/* 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...

Código SQL [-]
/* 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:

Código SQL [-]
/* 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:

Código SQL [-]
/* 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.


La franja horaria es GMT +2. Ahora son las 18:49:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi