Entendendo as Máscaras de Data yy
vs rr
no Oracle SQL
Ao trabalhar com formatos de data no Oracle SQL, uma dúvida comum surge: Qual é a diferença entre as máscaras de data yy
e rr
do Oracle? Compreender essa diferença pode afetar drasticamente os resultados retornados por suas consultas, especialmente ao lidar com formatos de ano de dois dígitos. Vamos analisar essas máscaras de data e esclarecer por que elas produzem resultados diferentes.
O Problema Explicado
No Oracle SQL, ao realizar manipulações ou comparações de datas, você pode encontrar situações em que precisa converter strings em formatos de data. As máscaras de data yy
e rr
são frequentemente utilizadas para esse propósito.
Aqui estão dois exemplos que demonstram suas diferenças:
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');
Quando executadas, essas duas consultas podem retornar resultados diferentes com base na interpretação do ano “81”.
Analisando as Máscaras de Data
A Máscara de Data yy
- Definição: A máscara
yy
permite que você insira um ano de dois dígitos. - Interpretação: O Oracle assume automaticamente que os dois dígitos se referem ao século atual.
- Por exemplo, se o ano atual é 2023, uma data como
01/05/81
seria interpretada como o ano2081
.
- Por exemplo, se o ano atual é 2023, uma data como
- Caso de Uso: Isso pode levar a resultados inesperados, especialmente para datas que se referem ao século 20.
A Máscara de Data rr
- Definição: A máscara
rr
também aceita anos de dois dígitos, mas usa um método diferente para interpretá-los. - Interpretação: Os anos de dois dígitos são arredondados para determinar o ano completo:
- 50-99: Tratados como anos
1950-1999
. - 00-49: Tratados como anos
2000-2049
.
- 50-99: Tratados como anos
- Exemplo: Assim,
01/05/81
seria interpretada como1981
, que provavelmente é a referência pretendida na maioria dos casos.
Recapitulando os Exemplos
Aqui está um resumo de como essas máscaras afetam a saída:
- A consulta usando
yy
:- Assume que
01/05/81
é2081
, o que provavelmente não tem contratações correspondentes.
- Assume que
- A consulta usando
rr
:- Vê a mesma data como
1981
, que presumivelmente possui registros de contratação na tabelaemp
.
- Vê a mesma data como
Conclusão
Compreender as diferenças entre yy
e rr
é crucial ao escrever consultas SQL no Oracle envolvendo datas. Enquanto yy
pode levar a uma interpretação equivocada de anos futuros, a máscara rr
oferece uma abordagem mais sensata para converter anos de dois dígitos com suas regras de arredondamento.
Escolher a máscara correta pode evitar que você exclua dados inadvertidamente e garantir que suas consultas SQL produzam os resultados pretendidos. Para a maioria dos casos envolvendo dados históricos, a máscara rr
é recomendada para clareza e precisão.
Sempre se certifique de considerar o contexto dos seus dados e o ano atual ao trabalhar com anos de dois dígitos para evitar armadilhas e erros de interpretação.