2008-10-15 21 views
18

Estoy intentando cumplir una solicitud de informes bastante difícil de un cliente, y necesito encontrar la distancia para obtener la diferencia entre dos columnas DateTime en minutos. Intenté usar trunc y round con varios formats y parece que no puedo encontrar una combinación que tenga sentido. ¿Hay una manera elegante de hacer esto? Si no es así, ¿hay alguna forma de hacer esto para?Oracle: ¿la mejor instrucción SELECT para obtener la diferencia en minutos entre dos columnas de DateTime?

Respuesta

38
SELECT date1 - date2 
    FROM some_table 

devuelve una diferencia en días. Multiplique por 24 para obtener una diferencia en horas y 24 * 60 para obtener minutos. Así

SELECT (date1 - date2) * 24 * 60 difference_in_minutes 
    FROM some_table 

debe ser lo que estás buscando

+4

No sabía que la resta de fecha devolviera el número de días. Ahora sé. – Powerlord

+1

¡No olvide redondear el resultado! Querrá REDONDEAR ((fecha1 - fecha2) * 1440,0) – 37Stars

+0

@Justin Cave Will (date1 - date2) give difference_in_minutes para el mismo día también? Si es así, ¿por qué todos dicen que la resta de fecha devuelve el número de días? –

9

Por defecto, la fecha oráculo resta devuelve un resultado en el # de días.

Así que simplemente multiplique por 24 para obtener # de horas, y nuevamente por 60 para # de minutos.

Ejemplo:

select 
    round((second_date - first_date) * (60 * 24),2) as time_in_minutes 
from 
    (
    select 
    to_date('01/01/2008 01:30:00 PM','mm/dd/yyyy hh:mi:ss am') as first_date 
    ,to_date('01/06/2008 01:35:00 PM','mm/dd/yyyy HH:MI:SS AM') as second_date 
    from 
    dual 
) test_data 
Cuestiones relacionadas