Tengo un campo de fechaOracle Fecha - Cómo añadir años a la fecha
DATE = 10/10/2010
suma = 4 (esto son varios años por cálculo)
¿Hay una manera de añadir cuatro años a 10/10/2010 y hacerlo 10/10/2014?
Tengo un campo de fechaOracle Fecha - Cómo añadir años a la fecha
DATE = 10/10/2010
suma = 4 (esto son varios años por cálculo)
¿Hay una manera de añadir cuatro años a 10/10/2010 y hacerlo 10/10/2014?
Intente agregar meses (12 * número de años) en su lugar. Así-
add_months(date'2010-10-10', 48)
Use add_months
Ejemplo:
SELECT add_months(to_date('10-OCT-2010'), 48) FROM DUAL;
Advertencia
ADD_MONTHS, devuelve el último día del mes que resulta si introduce el último día de un mes a empezar con.
Por lo tanto, add_months(to_date('28-feb-2011'),12)
devolverá 29-feb-2012 como resultado.
Creo que podría utilizar la función ADD_MONTHS()
. 4 años es de 48 meses, por lo que:
add_months(DATE,48)
Aquí hay alguna información sobre el uso de la función:
http://www.techonthenet.com/oracle/functions/add_months.php
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361
No estoy seguro, si he entendido bien su pregunta, pero
select add_months(someDate, numberOfYears * 12) from dual
podría hacer el truco
Solo una recomendación. Evite usar el tipo de datos INTERVAL. Cumple con ANSI/ISO. Por lo tanto, la declaración que escribió no funcionará el 29 de febrero. En general, depende de usted conceder que el resultado será correcto. Mientras add_months es propiedad de Oracle y genera fechas válidas para los casos. – ibre5041
@ ibre5041 Perdón por haber levantado esta publicación de la tumba, pero estaba buscando una forma de hacerlo sin tener que mantener el último día del mes al calcular los cumpleaños porque add_month() falla para 2/28. Cuando el próximo año es bisiesto add_months (to_date ('02 -28 ',' MM-DD ')) devuelve 02-29, que no es correcto.Encontré que hacer lo siguiente siempre devuelve la fecha correcta: (to_date ('02 -28 ',' MM-DD ') - 1) + intervalo' 1 'año + 1 devuelve 02-28, incluso si el próximo año es un salto año, y si pone en 02-29, devolverá 03-01 en años no bisiestos. – Bob
Una opción más, aparte de ADD_MONTHS
SELECT
SYSDATE,
SYSDATE
+ TO_YMINTERVAL ('1-0')
FROM
DUAL;
SYSDATE SYSDATE+TO_YMINTERVAL('1-0')
--------- ----------------------------
29-OCT-13 29-OCT-14
1 row selected.
SELECT
SYSDATE,
SYSDATE
+ TO_YMINTERVAL ('2-0')
FROM
DUAL;
SYSDATE SYSDATE+TO_YMINTERVAL('2-0')
--------- ----------------------------
29-OCT-13 29-OCT-15
1 row selected.
SELECT
TO_DATE ('29-FEB-2004',
'DD-MON-YYYY')
+ TO_YMINTERVAL ('1-0')
FROM
DUAL
*
Error at line 4
ORA-01839: date not valid for month specified
Pero la última es ilegal ya que no hay 29 días de de febrero de en 2005, por lo tanto falla en casos de año bisiesto (Feb 29)
Lea el documentation para el mismo
Funciona para años bisiestos, también. – ScrappyDev