Restar tiempos en Oracle

Respuesta de
a
Usuario
Hola: Esta ha de ser muy sencilla:

Cuando tengo en una tabla dos campos de tipo date (D1, D2) y realizo una select del tipo 'select D2-D1 from tabla' me devuelve el resultado en días, y yo lo quiero en segundos. ¿Qué función de formato debo aplicarle?

Mil gracias, de veras.
Experto
Buenas, te paso una select, que ayuda a convertir el valor en varios formatos:

select to_char( :fecha1, 'dd-mon-yyyy hh24:mi:ss' ),
trunc( :fecha1-:fecha2 ) "Días",
trunc( mod( (:fecha1-:fecha2)*24, 24 ) ) "Horas",
trunc( mod( (:fecha1-:fecha2)*24*60, 60 ) ) "Minutos",
trunc( mod( (:fecha1-:fecha2)*24*60*60, 60 ) ) "Segundos",
to_char(:fecha2, 'dd-mon-yyyy hh24:mi:ss' ),
:fecha1-:fecha2 "Total día",
(:fecha1-:fecha2)*24 "Total hora",
(:fecha1-:fecha2)*24*60 "Total min",
(:fecha1-:fecha2)*24*60*60 "Total seg"
from dual

Un saludo.
Usuario
Hola jaitram: Gracias por tu ayuda. Tengo un par de dudillas al respecto que me podrás solucionar:

1.- Esta select no me funciona en sqlplus, me devuelve el error SP2-0552: Variable de transferencia "FECHA2" no declarada. Como soy realmente novel en esto, no he usado nunca variables bind en las select, y no puedo arreglarlo.

2.- Como desarrollador, me resulta difícil comprender que Oracle, con más de 25 años de experiencia en BBDD, no proporciona funciones de formateo para este tipo de cosas, y haya que andar haciendo cuentas para obtener los segundos, etc.

Espero tu comentario, muchas gracias.

Juan Martínez
Experto
1. Perdona, al hacer la prueba, puse :fecha1, ya que en el TOAD (aplicación visual para ejecutar scripts, ver tablas, etc.. en Oracle) para después puedes sustituirla por la variable que desees. Para probarla con tus campos de fecha D1 y D2 de tu tabla, tendrías que poner:

select to_char( D1, 'dd-mon-yyyy hh24:mi:ss' ),
trunc( D1-D2 ) "Días",
trunc( mod( (D1-D2)*24, 24 ) ) "Horas",
trunc( mod( (D1-D2)*24*60, 60 ) ) "Minutos",
trunc( mod( (D1-D2)*24*60*60, 60 ) ) "Segundos",
to_char(D2, 'dd-mon-yyyy hh24:mi:ss' ),
D1-D2 "Total día",
(D1-D2)*24 "Total hora",
(D1-D2)*24*60 "Total min",
(D1-D2)*24*60*60 "Total seg"
from tabla

2. Sí, quizás podían haber implementado algún paquete para la utilización de ese tipo de funciones.

Un saludo.
Usuario
Muchas gracias, un saludo