Qual è la differenza tra la maschera data "yy" e "rr" di oracle?


19

Esempio:

select ename from emp where hiredate = todate('01/05/81','dd/mm/yy') 

e

select ename from emp where hiredate = todate('01/05/81','dd/mm/rr') 

ritorno risultati diversi

33

http://oracle.ittoolbox.com/groups/technical-functional/oracle-dev-l/difference-between-yyyy-and-rrrr-format-519525

YY consente di recuperare solo due cifre di un anno, ad esempio, il 99 in 1999. Le altre cifre (19) sono automaticamente y assegnato al secolo attuale . RR converte gli anni a due cifre in anni a quattro cifre arrotondando.

50-99 vengono memorizzati come 1950-1999 e le date che terminano con 00-49 vengono memorizzate come 2000-2049. RRRR accetta un input a quattro cifre (anche se non richiesto) e converte le date a due cifre come RR. AAAA accetta ingressi a 4 cifre butdoesn't fanno alcuna data di conversione

In sostanza, il tuo primo esempio si supponga che 81 è 2081 mentre la RR si assume 1981. Quindi il primo esempio, non deve restituire tutte le righe, come si più probabilmente non ha assunto nessuno dopo l'1 maggio 2081 :-)


4

y2k compatibilità. rr assume 01 per il 2001, aa assume 01 ad essere 1901

vedi: http://www.oradev.com/oracle_date_format.jsp

edit: accidenti! michael "quickfingers" stumbeat me to it!

/mp


5

@Michael Stum

La mia ultima esperienza di Oracle è un po 'molto tempo fa

uhm, era, prima del 2000? : P

...

Will yy sempre assumere 19xx?

according to your source, otteniamo i seguenti scenari:

USING 
ENTERED 
STORED 
SELECT of date column 


YY 
22-FEB-01 
22-FEB-1901 
22-FEB-01 


YYYY 
22-FEB-01 
22-FEB-0001 
22-FEB-0001 


RR 
22-FEB-01 
22-FEB-2001 
22-FEB-01 


RRRR 
22-FEB-01 
22-FEB-2001 
22-FEB-2001 

/mp


-1

RR sta per dopo il 1990 e yy assume 90 come 2090 .... come siamo nel anno corrente, ...

  0

No ... 'rr' è diverso a seconda se si è [prima del 50 ° anno del secolo] (http://docs.oracle.com/cd/E11882_01/server.112/ e26088/sql_elements004.htm # i116004) o no. 18 nov. 122012-11-18 18:10:12


1

RR visualizza quattro cifre come il 1999 o il 2015 (se si tratta di < 49 allora vaglierà 20 ° secolo)


0

A proposito di RR o RRRR:

Quando stiamo inserendo le date con 2 degits anni vale a dire 09/oct/15 quindi l'oracolo può cambiare automaticamente i secoli quindi l' silente è a 4 cifre. Ma la versione 4 degit è stata introdotta in alcune versioni di salvataggio, prima che le soluzioni per questo problema nelle versioni precedenti fosse RR o RRRR, Ma nota che funziona solo con lo con funzione TO_DATE() ma non con la funzione TO_CHAR().

Quando gli inserimenti/gli aggiornamenti vengono eseguiti in base alle date, è necessario chiarire sempre la data corrente in esecuzione nell'orario in associazione con la traduzione della data poiché Oracle esegue ogni conversione della data contattando il server.

Al fine di mantenere le consistenze tra i secoli è sempre meglio eseguire la traduzione della data con 4 anni di anni.

A proposito di AA o AAAA:

Si accetta le date, ma doesnt ha funzionalità per cambiare automaticamente.

This Image shows behaviour when inserting date with two degit no i.e. 09/oct/ 15