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

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

  •  09-06-2019
  •  | 
  •  

Pregunta

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

¿Fue útil?

Solución

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

YY le permite recuperar solo dos dígitos de un año, por ejemplo, el 99 en 1999.Los otros dígitos (19) se asignan automáticamente al siglo actual.RR convierte años de dos dígitos en años de cuatro dígitos mediante redondeo.

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 se requiere), y convierte las fechas de dos dígitos como lo hace RR.Yyyy acepta entradas de 4 dígitos pero no hace ninguna fecha para convertir

Esencialmente, su primer ejemplo asumirá que 81 es 2081, mientras que el RR asume 1981.Por lo tanto, el primer ejemplo no debería devolver ninguna fila, ya que lo más probable es que aún no haya contratado a nadie después del 1 de mayo de 2081 :-)

Otros consejos

@Michael Stum

Mi última experiencia con Oracle fue hace un poco de tiempo.

uhm, ¿fue antes del 2000?:pag

...

¿Yy siempre asumirá 19xx?

según tu fuente, 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

Compatibilidad con el año 2000.rr supone que 01 es 2001, yy supone que 01 es 1901

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

editar:¡maldición! michael "quickfingers" stum vencéme a eso!

/mp

RR muestra cuatro dígitos como 1999 o 2015 (si es <49, entonces se considerará el siglo XX)

Sobre RR o RRRR

Cuando insertamos fechas con años de 2 dígitos (es decir,09/oct/15) Entonces Oracle puede cambiar los siglos automáticamente, por lo tanto, la solución son fechas de 4 dígitos.Pero la versión de 4 dígitos se introduce en algunas versiones recientes, por lo tanto, las soluciones para este problema en versiones anteriores fueron RR o RRRR.Pero tenga en cuenta que sólo funciona con el TO_DATE() funcionar pero no con el TO_CHAR() función.

Siempre que se realicen inserciones/actualizaciones de fechas, siempre debemos aclarar la fecha actual que aparece en el reloj en asociación con la traducción de fechas, ya que Oracle realiza todas las traducciones de fechas comunicándose con el servidor.

Para mantener la coherencia entre los siglos, siempre es mejor ejecutar la traducción de fechas con años de 4 dígitos.

Acerca de YY o YYYY

Acepta las fechas pero no tiene funcionalidad para cambiarlas automáticamente.

Esta imagen muestra el comportamiento al insertar una fecha con dos dígitos (es decir,09/oct/15)

RR significa después de 1990 y yy supone 90 como 2090....como estamos en el año actual,...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top