88 votos

Calcular la diferencia entre 2 fechas / horas en Oracle SQL

Tengo una tabla de la siguiente manera:

Nombre del archivo - varchar
Fecha de creación - Formato de fecha dd/mm/yyyy hh24:mi:ss
Fecha del CDR más antiguo - Formato de fecha dd/mm/yyyy hh24:mi:ss

¿Cómo puedo calcular la diferencia en horas, minutos y segundos (y posiblemente días) entre las dos fechas en Oracle SQL?

Gracias

116voto

Thilo Puntos 108673

Puedes restar fechas en Oracle. Esto te dará la diferencia en días. Multiplica por 24 para obtener horas, y así sucesivamente.

SQL> select oldest - creation from my_table;

Si tu fecha está almacenada como datos de caracteres, primero debes convertirla a un tipo de dato fecha.

SQL> select 24 * (to_date('2009-07-07 22:00', 'YYYY-MM-DD hh24:mi') 
             - to_date('2009-07-07 19:30', 'YYYY-MM-DD hh24:mi')) diff_hours 
       from dual;

DIFF_HOURS
----------
       2.5

Nota:

Esta respuesta se aplica a fechas representadas por el tipo de datos de Oracle DATE. Oracle también tiene un tipo de datos TIMESTAMP, que también puede representar una fecha (con hora). Si restas valores de tipo TIMESTAMP, obtendrás un INTERVALO; para extraer valores numéricos, utiliza la función EXTRACT.

16voto

Mohsen Heydari Puntos 5098
declare
strTime1 varchar2(50) := '02/08/2013 01:09:42 PM';
strTime2 varchar2(50) := '02/08/2013 11:09:00 PM';
v_date1 date := to_date(strTime1,'DD/MM/YYYY HH:MI:SS PM');
v_date2 date := to_date(strTime2,'DD/MM/YYYY HH:MI:SS PM');
difrence_In_Hours number;
difrence_In_minutes number;
difrence_In_seconds number;
begin
    difrence_In_Hours   := (v_date2 - v_date1) * 24;
    difrence_In_minutes := difrence_In_Hours * 60;
    difrence_In_seconds := difrence_In_minutes * 60;

    dbms_output.put_line(strTime1);        
    dbms_output.put_line(strTime2);
    dbms_output.put_line('*******');
    dbms_output.put_line('difrence_In_Hours  : ' || difrence_In_Hours);
    dbms_output.put_line('difrence_In_minutes: ' || difrence_In_minutes);
    dbms_output.put_line('difrence_In_seconds: ' || difrence_In_seconds);        
end ;

Espero que esto ayude.

7voto

HyLian Puntos 2058

Puedes usar la función to_timestamp para convertir las fechas a marcas de tiempo y realizar una operación de resta.

Algo así:

SELECT 
TO_TIMESTAMP ('13.10.1990 00:00:00','DD.MM.YYYY HH24:MI:SS')  - 
TO_TIMESTAMP ('01.01.1990:00:10:00','DD.MM.YYYY:HH24:MI:SS')
FROM DUAL

5voto

SUNIL BEHERA Puntos 11

Calcula la edad desde la FECHA DE CONTRATACIÓN hasta la fecha de sistema de tu computadora

SELECT HIREDATE||'        '||SYSDATE||'       ' ||
TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) ||' AÑOS '||
TRUNC((MONTHS_BETWEEN(SYSDATE,HIREDATE))-(TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)*12))||
'MESES' AS "EDAD  "  FROM EMP;

3voto

amitt Gaur Puntos 11
seleccionar days||' '|| tiempo de (
SELECCIONAR to_number( to_char(to_date('1','J') +
    (CLOSED_DATE - CREATED_DATE), 'J') - 1)  days,
   to_char(to_date('00:00:00','HH24:MI:SS') +
      (CLOSED_DATE - CREATED_DATE), 'HH24:MI:SS') tiempo
 DESDE  petición  donde REQUEST_ID=158761088 );

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X