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 ano 2081.
  • 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.
  • Exemplo: Assim, 01/05/81 seria interpretada como 1981, 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.
  • A consulta usando rr:
    • Vê a mesma data como 1981, que presumivelmente possui registros de contratação na tabela emp.

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.