Oracle
 sql >> Base de données >  >> RDS >> Oracle

Date de création d'Oracle SQL à partir de pièces

Voici une approche utilisant ADD_MONTHS et EXTRACT(YEAR FROM ....) . Vous ajoutez ou soustrayez simplement le nombre de mois nécessaires (toujours un multiple de 12, puisque vous ne changez que l'année). Contrairement au TO_CHAR / TO_DATE solutions, cette approche gère les jours bissextiles (29 février). D'autre part, sachez que changer la date du 28 février 2003 à l'année 2012 la changera au 29 février (ADD_MONTHS remplace le dernier jour d'un mois par le dernier jour du mois résultant).

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