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ño2081
.
- Por ejemplo, si el año actual es 2023, una fecha como
- 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
.
- 50-99: Tratados como años
- Ejemplo: Así,
01/05/81
sería interpretado como1981
, 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
es2081
, que probablemente no tiene contrataciones correspondientes.
- Asume que
- La consulta que utiliza
rr
:- Ve la misma fecha como
1981
, que presumiblemente tiene registros de contrataciones en la tablaemp
.
- Ve la misma fecha como
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.