Come fanno aggiornare una colonna di data cambiando solo l'anno e non il giorno o il mese utilizzando PLSQL?
-
02-10-2019 - |
Domanda
Ho una tabella del database che contiene i record di carte di credito. Uno dei campi è un campo Data. Vorrei aggiornare questo campo modificando la parte relativa all'anno della data al 2011 se l'anno è inferiore a 2010. Da quello che ho trovato, PLSQL ha funzioni per il tempo e mesi, ma niente a che fare con gli anni (a mia conoscenza).
Soluzione
Questa mostra come
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')
/
Altri suggerimenti
1 anno = 12 mesi, in modo da sottrarre 12 mesi:
select add_months(sysdate,-12) from dual
Ecco come fare in modo che funziona con gli anni bisestili utilizzando 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');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow