J'ai une table de base de données contenant des dossiers de carte de crédit. L'un des champs est un champ Date. Je voudrais mettre à jour ce champ en changeant la partie année de la date à 2011 si l'année est inférieure à 2010. D'après ce que j'ai trouvé, PLSQL a des fonctions pour le temps et les mois mais rien à voir avec les années.Comment mettre à jour une colonne de date en changeant seulement l'année et pas le jour ou le mois en utilisant PLSQL?
1
A
Répondre
4
Cela montre comment
with cc as(
select to_date('12-jan-1999') as cdate from dual union all
select to_date('12-jan-1921') as cdate from dual union all
select to_date('12-jan-1900') as cdate from dual union all
select to_date('12-jan-2000') as cdate from dual union all
select to_date('12-jan-2010') as cdate from dual
)
select to_date(to_char(cdate,'DD-MON') ||'-2011','DD-MON-YYYY')
from cc
where cdate < to_date('01-JAN-2010','DD-MON-YYYY')
/
3
1 an = 12 mois, donc il faut soustraire 12 mois:
select add_months(sysdate,-12) from dual
1
Voici comment faire si cela fonctionne avec les années bissextiles en utilisant ADD_MONTHS.
with cc as(
select to_date('12-jan-1999','dd-mon-yyyy') as cdate from dual union all
select to_date('12-jan-1921','dd-mon-yyyy') as cdate from dual union all
select to_date('29-feb-1904','dd-mon-yyyy') as cdate from dual union all
select to_date('12-jan-2000','dd-mon-yyyy') as cdate from dual union all
select to_date('12-jan-2010','dd-mon-yyyy') as cdate from dual
)
select add_months(cdate,(2011 - extract(year from cdate)) * 12)
from cc
where cdate < to_date('01-JAN-2010','DD-MON-YYYY');
J'aime ça. J'aime beaucoup ça. Donnez-moi quelques minutes pour le tester. – jake
Cela se brisera un jour par an sur les années bissextiles. ADD_MONTHS est une solution plus robuste. – Allan