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.