Oracle Database
Trabajando con fechas
Buscar..
Fecha aritmética
Oracle admite los tipos de datos DATE
(incluye el tiempo al segundo más cercano) y TIMESTAMP
(incluye el tiempo a fracciones de un segundo), lo que permite la aritmética (suma y resta) de forma nativa. Por ejemplo:
Para llegar al día siguiente:
select to_char(sysdate + 1, 'YYYY-MM-DD') as tomorrow from dual;
Para obtener el día anterior:
select to_char(sysdate - 1, 'YYYY-MM-DD') as yesterday from dual;
Para agregar 5 días a la fecha actual:
select to_char(sysdate + 5, 'YYYY-MM-DD') as five_days_from_now from dual;
Para agregar 5 horas a la fecha actual:
select to_char(sysdate + (5/24), 'YYYY-MM-DD HH24:MI:SS') as five_hours_from_now from dual;
Para agregar 10 minutos a la fecha actual:
select to_char(sysdate + (10/1440), 'YYYY-MM-DD HH24:MI:SS') as ten_mintues_from_now from dual;
Para agregar 7 segundos a la fecha actual:
select to_char(sysdate + (7/86400), 'YYYY-MM-DD HH24:MI:SS') as seven_seconds_from_now from dual;
Para seleccionar filas en las que hire_date
sea hace 30 días o más:
select * from emp where hire_date < sysdate - 30;
Para seleccionar filas donde la columna last_updated
está en la última hora:
select * from logfile where last_updated >= sysdate - (1/24);
Oracle también proporciona el INTERVAL
tipo de datos incorporado, que representa una duración de tiempo (por ejemplo, 1,5 días, 36 horas, 2 meses, etc.). También se pueden usar con aritmética con expresiones DATE
y TIMESTAMP
. Por ejemplo:
select * from logfile where last_updated >= sysdate - interval '1' hour;
Función Add_months
Sintaxis: add_months(p_date, integer) return date;
La función Add_months agrega meses amt a la fecha p_date.
SELECT add_months(date'2015-01-12', 2) m FROM dual;
METRO |
---|
2015-03-12 |
También puedes restar meses usando un amt
negativo.
SELECT add_months(date'2015-01-12', -2) m FROM dual;
METRO |
---|
2014-11-12 |
Cuando el mes calculado tenga menos días como la fecha dada, se devolverá el último día del mes calculado.
SELECT to_char( add_months(date'2015-01-31', 1),'YYYY-MM-DD') m FROM dual;
METRO |
---|
2015-02-28 |