Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Data de criação do Oracle SQL a partir de peças


Aqui está uma abordagem usando ADD_MONTHS e EXTRACT(YEAR FROM ....) . Você simplesmente soma ou subtrai o número necessário de meses (sempre um múltiplo de 12, já que você está apenas mudando o ano). Ao contrário do TO_CHAR / TO_DATE soluções, essa abordagem lida com dias bissextos (29 de fevereiro). Por outro lado, esteja ciente de que alterar a data de 28 de fevereiro de 2003 para o ano de 2012 mudará para 29 de fevereiro (ADD_MONTHS altera o último dia de um mês para o último dia do mês 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