Come fanno aggiornare una colonna di data cambiando solo l'anno e non il giorno o il mese utilizzando PLSQL?

StackOverflow https://stackoverflow.com/questions/3163676

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).

È stato utile?

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
scroll top