En este grupo En todos

Foro de Oracle



RESTAR HORAS EN SQL DE ORACLE

AGuerra
Madrid, España
Escrito por Aguerra
el 06/05/2008

Hola, tengo almacenadas en una tabla VUELO la hora de salida y la hora de llegada del mismo en el siguiente formato: DATE("7:00","HH24:MI")


Ahora necesito una consulta a la tabla para que me devuelva la duracion del vuelo, es decir, que me reste a la hora de llegada, la hora de salida... Pero no consigo hacer que funcione.


Algún consejo?


Gracias de antemano

Ernie Gonzalez
Capital Federal, Arg...
Escrito por Ernie Gonzalez
el 09/05/2008

Hola aguerra,

Sólo las hora de partida y de arribo no son suficientes para calcular el tiempo de vuelo, necesitas además el dato de la fecha de partida y fecha de arribo.

/********************************************************/

Create table VUELOS

(

IDVUELO NUMBER not null,

FECHASALIDA DATE,

FECHALLEGADA DATE

);

Alter table VUELOS

Add constraint PK_VUELOS primary key (IDVUELO);

/********************************************************/

INSERT INTO vuelos

(idvuelo, fechasalida, fechallegada)

VALUES

(1,

TO_DATE("09/05/2008 10:00", "dd/mm/yyyy HH24:Mi"),

TO_DATE("09/05/2008 14:00", "dd/mm/yyyy HH24:Mi")

);

INSERT INTO vuelos

(idvuelo, fechasalida, fechallegada)

VALUES

(2,

TO_DATE("09/05/2008 10:00", "dd/mm/yyyy HH24:Mi"),

TO_DATE("10/05/2008 14:00", "dd/mm/yyyy HH24:Mi")

);

INSERT INTO vuelos

(idvuelo, fechasalida, fechallegada)

VALUES

(3,

TO_DATE("09/05/2008 10:00", "dd/mm/yyyy HH24:Mi"),

TO_DATE("10/05/2008 08:00", "dd/mm/yyyy HH24:Mi")

);


/********************************************************/


SELECT a. Idvuelo,

a. Fechasalida,

a. Fechallegada,

(a. Fechallegada - a. Fechasalida) * 24 AS TIEMPO

FROM vuelos a

ORDER BY 1

;

/********************************************************/

SELECT (TO_DATE("17:30", "HH24:MI") - TO_DATE("7:00", "HH24:MI")) * 24 AS Tiempo --* 60 * 60

FROM dual

;

 saludos

Aguerra
Madrid, España
Escrito por Aguerra
el 09/05/2008

Gracias por responder. Me ha servido de ayuda tu respuesta, pero no era necesario meter la fecha, con la hora es suficiente. Mi error era no multiplicar la resta de horas *24 para saber el numero de horas de diferencia y luego *60 para que se muestre el numero de minutos.

Un saludo




Rodrigo Maturana
Ingeniería de ejecución en informatica...
Escrito por Rodrigo Maturana
el 19/06/2008

Hola, me sirvio el ejemplo que Uds. Dieron, pero quiero agregar otra forma de visualizar el resultado:

SELECT a. Idvuelo, a. Fechasalida,

a. Fechallegada,

TO_CHAR(trunc(sysdate)+(fecha_fin_gst-fecha_ini_gst),"HH24:MI:SS") AS TIEMPO

FROM vuelos a ORDER BY 1

Esto permite ver el resultado en formato hora:minutos:segundos...

Saludos

Rodrigo


Escrito por Katetu
el 26/06/2009

NECESITO SUMAR CANTIDAD DE MINUTOS A UNA HORA DE INCIO, Y ESTA FUNCION NO ME SIRVE, ME DEVUELVE ES UNA FECHA! Y NECESITO ES LA HORA FIN


----------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION CalcularHoraFin(HoraInicio In DATE, Kilometros IN NUMBER ) RETURN DATE IS resultado DATE;

SI ME PUEDEN AYUDAR BUENISIMO! GRACIAS

Minutos NUMBER;
H date;

BEGIN

Minutos:= trunc (Kilometros*60)/100),0);
resultado:= to_date(horaInicio+minutos/1440),"HH24:MI:ss");

Dbms_output. Put_line(to_date(resultado,"HH24:MI:SS"));


return(resultado);

END CalcularHoraFin;

Rodrigo Cortés
Santiago, Chile
Escrito por Rodrigo Cortés
el 22/06/2010

SELECT desde, hasta, dif, TRUNC (dif) dias,
CASE
WHEN dif <> 0
THEN TRUNC (24 * (dif - TRUNC (dif)))
ELSE 0
END horas,
CASE
WHEN dif <> 0
THEN TRUNC ( 60
* ( (24 * (dif - TRUNC (dif)))
- TRUNC (24 * (dif - TRUNC (dif)))
)
)
ELSE 0
END minutos,
CASE
WHEN dif <> 0
THEN 60
* ( ( 60
* ( (24 * (dif - TRUNC (dif)))
- TRUNC (24 * (dif - TRUNC (dif)))
)
)
- TRUNC ( 60
* ( (24 * (dif - TRUNC (dif)))
- TRUNC (24 * (dif - TRUNC (dif)))
)
)
)
ELSE 0
END segundos
FROM (SELECT a. Fecha1 desde, a. Fecha2 hasta,
ABS (a. Fecha2 - a. Fecha1) dif
FROM tabla a)

Karen Maaaaaa
Bogotá, Colombia
Escrito por Karen Maaaaaa
el 22/09/2011

GRacias Rodrigo Maturana! Me sirvio enormemente!