Entendiendo las máscaras de fecha yy vs rr en Oracle SQL

Al trabajar con formatos de fecha en Oracle SQL, surge una pregunta común: ¿Cuál es la diferencia entre las máscaras de fecha yy y rr de Oracle? Entender esta diferencia puede afectar drásticamente los resultados devueltos por tus consultas, especialmente al tratar con formatos de año de dos dígitos. Desglosamos estas máscaras de fecha y aclaramos por qué producen resultados diferentes.

El Problema Explicado

En Oracle SQL, al realizar manipulaciones o comparaciones de fechas, puedes encontrarte en situaciones donde necesitas convertir cadenas en formatos de fecha. Las máscaras de fecha yy y rr se utilizan comúnmente para este propósito.

Aquí hay dos ejemplos que demuestran sus diferencias:

SELECT ename FROM emp WHERE hiredate = TO_DATE('01/05/81', 'dd/mm/yy');
SELECT ename FROM emp WHERE hiredate = TO_DATE('01/05/81', 'dd/mm/rr');

Al ejecutarse, estas dos consultas pueden devolver resultados diferentes según la interpretación del año “81”.

Desglosando las Máscaras de Fecha

La Máscara de Fecha yy

  • Definición: La máscara yy permite ingresar un año de dos dígitos.
  • Interpretación: Oracle asume automáticamente que los dos dígitos pertenecen al siglo actual.
    • Por ejemplo, si el año actual es 2023, una fecha como 01/05/81 sería interpretada como el año 2081.
  • Caso de Uso: Esto puede llevar a resultados inesperados, especialmente para fechas que se refieren al siglo XX.

La Máscara de Fecha rr

  • Definición: La máscara rr también acepta años de dos dígitos, pero utiliza un método diferente para interpretarlos.
  • Interpretación: Los años de dos dígitos se redondean para determinar el año completo:
    • 50-99: Tratados como años 1950-1999.
    • 00-49: Tratados como años 2000-2049.
  • Ejemplo: Así, 01/05/81 sería interpretado como 1981, que es probablemente la referencia pretendida en la mayoría de los casos.

Recapitulación de Ejemplos

Aquí hay una recapitulación de cómo estas máscaras afectan la salida:

  • La consulta que utiliza yy:
    • Asume que 01/05/81 es 2081, que probablemente no tiene contrataciones correspondientes.
  • La consulta que utiliza rr:
    • Ve la misma fecha como 1981, que presumiblemente tiene registros de contrataciones en la tabla emp.

Conclusión

Entender las diferencias entre yy y rr es crucial al escribir consultas SQL de Oracle que involucren fechas. Mientras que yy puede llevar a una mala interpretación de los años futuros, la máscara rr proporciona un enfoque más sensato para convertir años de dos dígitos con sus reglas de redondeo.

Elegir la máscara correcta puede salvarte de excluir datos accidentalmente y garantizar que tus consultas SQL arrojen los resultados deseados. Para la mayoría de los casos relacionados con datos históricos, se recomienda la máscara rr por su claridad y precisión.

Siempre asegúrate de considerar el contexto de tus datos y el año actual al trabajar con años de dos dígitos para evitar trampas y errores en la interpretación.