Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Área de Tecnologías de la Información y las Comunicaciones Aplicadas Universidad de Murcia
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
ATICA arrow Consultoria arrow DBconnector arrow SQL - INTERVAL (Intervalos de fecha)
24.05.2012
 
 
SQL - INTERVAL (Intervalos de fecha) Imprimir E-mail
Supongamos que estás creando un JOB y tienes que indicar un intervalo de repetición de 30 segundos ... tal vez estás pensando en una expresión como "sysdate + 30/86400"; pero ya desde Oracle 9i se podría usar la expresión "INTERVAL '30' SECOND", que además es mucho más intuitiva y fácil de leer.

Esta expresión es posible porque, desde Oracle 9i, existe un nuevo tipo de dato (INTERVAL) que permite expresar intervalos de tiempo. Realmente son dos nuevos tipos (INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND), que permiten expresar intervalos de años (como "3 años y 5 meses") y de días (como "5 días, 10 horas, 30 minutos y 22'345 segundos"). En el siguiente ejemplo, los 4 primeros casos son intervalos de días (DAY TO SECOND) y los 2 últimos de años (YEAR TO MONTH):
SQL> select INTERVAL '70.005' SECOND from dual;
INTERVAL'30'SECOND
---------------------------------------------------------------------------
+00 00:01:10.005000

SQL> select INTERVAL '130' minute from dual;
INTERVAL'30'MINUTE
---------------------------------------------------------------------------
+00 02:10:00

SQL> select INTERVAL '25' hour from dual;
INTERVAL'25'HOUR
---------------------------------------------------------------------------
+01 01:00:00

SQL> select INTERVAL '30' day from dual:
INTERVAL'30'DAY
---------------------------------------------------------------------------
+30 00:00:00

SQL> select INTERVAL '30' month from dual;
INTERVAL'30'MONTH
---------------------------------------------------------------------------
+02-06

SQL> select INTERVAL '30' year from dual;
INTERVAL'30'YEAR
---------------------------------------------------------------------------
+30-00
Como podemos observar, la expresión "INTERVAL '25' HOUR" la "traduce" como "1 día y 1 hora", y la expresión "INTERVAL '30' MONTH" como "2 años y 6 meses".

También podemos restar (o sumar) un intervalo a una fecha. En este lo recomendable sería usar  tipo TIMESTAMP (ver referencias), y no DATE:

SQL> SELECT SYSTIMESTAMP, SYSTIMESTAMP - INTERVAL '20' MINUTE FROM DUAL
SYSTIMESTAMP
---------------------------------------------------------------------------
SYSTIMESTAMP-INTERVAL'20'MINUTE
---------------------------------------------------------------------------
06-OCT-10 11.24.45.516813 AM +02:00
06-OCT-10 11.04.45.516813000 AM +02:00

SQL> select to_char(sysdate,'dd-mm-yyyy hh24:mi:ss'), to_char(sysdate - INTERVAL '20' MINUTE,'dd-mm-yyyy hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'DD TO_CHAR(SYSDATE-INT
------------------- -------------------
06-10-2010 11:29:00 06-10-2010 11:09:00

Referencias:
Última modificación ( 06.10.2010 )
 
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Volver al incio del documento Volver al inicio del documento
Área de Tecnologías de la Información y las Comunicaciones Aplicadas