sql >> Base de Datos >  >> RDS >> Oracle

RR frente a YY en Oracle

Al formatear fechas en Oracle Database, tenemos la opción de usar RR y YY para devolver un año de dos dígitos.

Estos dos elementos de formato son similares. La diferencia está en cómo interpretan los años de dos dígitos.

También tenemos la opción de usar RRRR y YYYY al devolver años de cuatro dígitos.

Ejemplo

Aquí hay un ejemplo que compara el RR y YY elementos de formato:

SELECT 
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-RR'), 'YYYY') AS "RR",
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-YY'), 'YYYY') AS "YY"
FROM DUAL;

Resultado:

     RR      YY 
_______ _______ 
1981    2081   

Podemos ver que RR interpreta el año 81 como 1981, mientras que YY lo interpreta como 2081.

  • Al usar YY , el año devuelto siempre tiene los mismos 2 primeros dígitos que el año actual.
  • Con RR , el siglo del valor devuelto varía según el año de dos dígitos especificado y los dos últimos dígitos del año actual.

Así es como lo explica la documentación de Oracle:

  • Si el año de dos dígitos especificado es 00 a 49, entonces
    • Si los dos últimos dígitos del año actual son 00 a 49, entonces el año devuelto tiene los mismos primeros dos dígitos que el año actual.
    • Si los últimos dos dígitos del año actual son 50 a 99, entonces los primeros 2 dígitos del año devuelto son 1 mayor que los primeros 2 dígitos del año actual.
  • Si el año de dos dígitos especificado es del 50 al 99, entonces
    • Si los dos últimos dígitos del año actual son 00 a 49, entonces los primeros 2 dígitos del año devuelto son 1 menos que los primeros 2 dígitos del año actual.
    • Si los dos últimos dígitos del año actual son del 50 al 99, entonces el año devuelto tiene los mismos primeros dos dígitos que el año actual.

El RRRR y YYYY Elementos de formato

Aquí hay un ejemplo que compara el RRRR y YYYY elementos de formato:

SELECT 
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-RRRR'), 'YYYY') AS "RRRR",
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-YYYY'), 'YYYY') AS "YYYY"
FROM DUAL;

Resultado:

   RRRR    YYYY 
_______ _______ 
1981    0081   

En este caso, RRRR devuelve el mismo año que RR lo hizo, pero YYYY devuelve el año 0081.

Los ejemplos anteriores asumen que sabes cómo TO_CHAR() y TO_DATE() trabaja. Ver Oracle TO_CHAR(datetime) Función y Oracle TO_DATE() Función en Oracle para más información.