sql >> Base de Datos >  >> RDS >> Oracle

Fecha de creación de Oracle SQL a partir de partes

Aquí hay un enfoque usando ADD_MONTHS y EXTRACT(YEAR FROM ....) . Simplemente sumas o restas el número de meses necesarios (siempre un múltiplo de 12, ya que solo estás cambiando el año). A diferencia del TO_CHAR / TO_DATE soluciones, este enfoque maneja los días bisiestos (29 de febrero). Por otro lado, tenga en cuenta que al cambiar la fecha del 28 de febrero de 2003 al año 2012, se cambiará al 29 de febrero (ADD_MONTHS cambia el último día de un mes al último día del mes resultante).

with
     inputs as (
       select date '2013-03-22' as effective_date,
              date '2017-08-14' as point_date
       from   dual
     )
-- end of TEST data (do not include in the solution!)
select effective_date, point_date,
       add_months(point_date, 12 * ( extract (year from effective_date) - 
                                     extract (year from point_date)     )
                 ) as mixed_date
from   inputs;

EFFECTIVE_DATE  POINT_DATE  MIXED_DATE
--------------  ----------  ----------
03/22/2013      08/14/2017  08/14/2013