obtener - Calcule la diferencia entre 2 fecha/hora en Oracle SQL
restar horas timestamp oracle (16)
Aquí hay otra opción:
with tbl_demo AS
(SELECT TO_DATE(''11/26/2013 13:18:50'', ''MM/DD/YYYY HH24:MI:SS'') dt1
, TO_DATE(''11/28/2013 21:59:12'', ''MM/DD/YYYY HH24:MI:SS'') dt2
FROM dual)
SELECT dt1
, dt2
, round(dt2 - dt1,2) diff_days
, round(dt2 - dt1,2)*24 diff_hrs
, numtodsinterval((dt2 - dt1),''day'') diff_dd_hh_mm_ss
from tbl_demo;
Tengo una mesa de la siguiente manera:
Filename - varchar
Creation Date - Date format dd/mm/yyyy hh24:mi:ss
Oldest cdr date - Date format dd/mm/yyyy hh24:mi:ss
¿Cómo calculo la diferencia en horas, minutos y segundos (y posiblemente días) entre las dos fechas en Oracle SQL?
Gracias
Calcule la edad desde HIREDATE hasta la fecha del sistema de su computadora
SELECT HIREDATE||'' ''||SYSDATE||'' '' ||
TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) ||'' YEARS ''||
TRUNC((MONTHS_BETWEEN(SYSDATE,HIREDATE))-(TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)*12))||
''MONTHS'' AS "AGE " FROM EMP;
Esto contará el tiempo entre las fechas:
SELECT
(TO_CHAR( TRUNC (ROUND(((sysdate+1) - sysdate)*24,2))*60,''999999'')
+
TO_CHAR(((((sysdate+1)-sysdate)*24)- TRUNC(ROUND(((sysdate+1) - sysdate)*24,2)))/100*60 *100, ''09''))/60
FROM dual
Para obtener el resultado en segundos:
select (END_DT - START_DT)*60*60*24 from MY_TABLE;
Verifique [ https://community.oracle.com/thread/2145099?tstart=0][1]
Puede restar fechas en Oracle. Esto te dará la diferencia en días. Multiplique por 24 para obtener horas, y así sucesivamente.
SQL> select oldest - creation from my_table;
Si su fecha se almacena como datos de caracteres, primero debe convertirla en un tipo de 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 las fechas representadas por el tipo de datos Oracle DATE
. Oracle también tiene un tipo de datos TIMESTAMP
, que también puede representar una fecha (con el tiempo). Si resta valores TIMESTAMP
, obtiene un INTERVAL
; para extraer valores numéricos, use la función EXTRACT
.
Puede usar la función to_timestamp para convertir las fechas a marcas de tiempo y realizar una operación de resta.
Algo como:
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
Si quieres algo que parezca un poco más simple, prueba esto para encontrar eventos en una tabla que ocurrió en el último minuto:
Con esta entrada puede jugar con los valores decimales hasta que obtenga el valor de minuto que desea. El valor .0007 pasa a ser de 1 minuto en lo que respecta a los dígitos significativos de sysdate. Puede usar múltiples de eso para obtener cualquier otro valor que desee:
select (sysdate - (sysdate - .0007)) * 1440 from dual;
El resultado es 1 (minuto)
Entonces, es una cuestión simple verificar
select * from my_table where (sysdate - transdate) < .00071;
Si selecciona dos fechas de '' su_tabla '' y desea también ver el resultado como salida de una sola columna (por ejemplo, '' días - hh: mm: ss '') podría usar algo como esto. Primero, podría calcular el intervalo entre estas dos fechas y luego exportar todos los datos que necesita de ese intervalo:
select extract (day from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date,created_date))),
''day''))
|| '' days - ''
|| extract (hour from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date,created_date))),
''day''))
|| '':''
|| extract (minute from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date, created_date))),
''day''))
|| '':''
|| extract (second from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date, created_date))),
''day''))
from your_table
Y eso debería darte un resultado como este: 0 días - 1:14:55
También puedes probar esto:
select to_char(to_date(''1970-01-01 00:00:00'', ''yyyy-mm-dd hh24:mi:ss'')+(end_date - start_date),''hh24:mi:ss'')
as run_time from some_table;
Muestra el tiempo en una forma legible más humana, como: 00:01:34. Si también necesita días, simplemente puede agregar DD a la última cadena de formato.
en el oráculo 11g
select end_date - start_date como day_diff de tablexxx supongamos que starT_date end_date se define en la tablaxxx
$sql="select bsp_bp,user_name,status,
to_char(ins_date,''dd/mm/yyyy hh12:mi:ss AM''),
to_char(pickup_date,''dd/mm/yyyy hh12:mi:ss AM''),
trunc((pickup_date-ins_date)*24*60*60,2),message,status_message
from valid_bsp_req where id >= ''$id''";
(TO_DATE(:P_comapre_date_1, ''dd-mm-yyyy hh24:mi'') - TO_DATE(:P_comapre_date_2, ''dd-mm-yyyy hh24:mi''))*60*60*24 sum_seconds,
(TO_DATE(:P_comapre_date_1, ''dd-mm-yyyy hh24:mi'') - TO_DATE(:P_comapre_date_2, ''dd-mm-yyyy hh24:mi''))*60*24 sum_minutes,
(TO_DATE(:P_comapre_date_1, ''dd-mm-yyyy hh24:mi'') - TO_DATE(:P_comapre_date_2, ''dd-mm-yyyy hh24:mi''))*24 sum_hours,
(TO_DATE(:P_comapre_date_1, ''dd-mm-yyyy hh24:mi'') - TO_DATE(:P_comapre_date_2, ''dd-mm-yyyy hh24:mi'')) sum_days
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.
select
extract( day from diff ) Days,
extract( hour from diff ) Hours,
extract( minute from diff ) Minutes
from (
select (CAST(creationdate as timestamp) - CAST(oldcreationdate as timestamp)) diff
from [TableName]
);
Esto le dará tres columnas como Días, Horas y Minutos.
select (floor(((DATE2-DATE1)*24*60*60)/3600)|| '' : '' ||floor((((DATE2-DATE1)*24*60*60) -floor(((DATE2-DATE1)*24*60*60)/3600)*3600)/60)|| '' '' ) as time_difference from TABLE1
select days||'' ''|| time from (
SELECT 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'') time
FROM request where REQUEST_ID=158761088 );