¿Cuál es la diferencia entre la máscara de fecha de 'yy' y 'rr' de oráculo?


19

Ejemplo:

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

y

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

devolver resultados diferentes

33

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

YY le permite recuperar sólo dos dígitos de un año, por ejemplo, el 99 en 1999. Los otros dígitos (19) son automáticos y asignado al actual del siglo. RR convierte años de dos dígitos en años de cuatro dígitos redondeando.

50-99 se almacenan como 1950-1999, y las fechas que terminan en 00-49 se almacenan como 2000-2049. RRRR acepta una entrada de cuatro dígitos (aunque no es obligatorio) y convierte las fechas de dos dígitos como lo hace RR. AAAA acepta entradas de 4 dígitos butdoesn't hacen cualquier fecha convertir

Esencialmente, el primer ejemplo se asume que el 81 es 2.081 mientras que el RR asume 1981. Así que el primer ejemplo que no debe devolver ninguna fila a medida que la mayor parte probablemente no haya contratado ningún hombre después del 1 de mayo de 2081 todavía :-)


4

compatibilidad con y2k. rr asume 01 a ser 2001, yy asume 01 para ser 1901

véase: http://www.oradev.com/oracle_date_format.jsp

edición: maldita! michael "quickfingers" stumbeat me to it!

/mp


5

@Michael Stum

Mi última experiencia de Oracle es un poco tiempo atrás

uhm, era, antes de 2000? : P

...

Will yy siempre ha de asumir 19xx?

according to your source, obtenemos los siguientes escenarios:

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 es sinónimo de después de 1990 e yy asume como 90 2090 .... ya que estamos en el año actual, ...

  0

Nop ... 'rr' es diferente dependiendo de si se encuentra [antes del 50 años del siglo] (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 muestra cuatro dígitos como 1999 o 2015 (si es < 49 entonces se considerará siglo 20)


0

Acerca de RR o RRRR:

Cuando estamos insertando las fechas con 2 degits años es decir 09/oct/15
luego el oráculo puede cambiar los siglos automáticamente, por lo tanto, el es una fecha de 4 dígitos. Pero la versión de 4 grados se introduce en en algunas versiones anteriores, antes las soluciones para este problema en versiones anteriores era RR o RRRR, Pero tenga en cuenta que solo funciona con la función TO_DATE() pero noth con la función TO_CHAR().

Cada vez que se realizan inserciones/actualizaciones en fechas, siempre debemos aclarar la fecha actual en el reloj asociada a la traducción de la fecha, ya que Oracle realiza cada traducción de la fecha al contactar al servidor.

Para mantener las consistencias entre los siglos, siempre es mejor ejecutar la traducción de fecha con 4 años de degit.

Acerca de AA o AAAA:

acepta las fechas pero tampoco tiene la funcionalidad para cambiar automáticamente.

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