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.