Comprendre les masques de date yy et rr dans Oracle SQL

Lors de l’utilisation de formats de date dans Oracle SQL, une question courante se pose : Quelle est la différence entre les masques de date yy et rr d’Oracle ? Comprendre cette différence peut avoir un impact considérable sur les résultats retournés par vos requêtes, en particulier lors de la gestion des formats d’année à deux chiffres. Décomposons ces masques de date et clarifions pourquoi ils produisent des résultats différents.

Problème expliqué

Dans Oracle SQL, lors de la manipulation ou de la comparaison de dates, vous pouvez rencontrer des situations où vous devez convertir des chaînes en formats de date. Les masques de date yy et rr sont souvent utilisés à cet effet.

Voici deux exemples qui montrent leurs différences :

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');

Lorsque ces deux requêtes sont exécutées, elles peuvent renvoyer des résultats différents en fonction de l’interprétation de l’année “81”.

Décomposition des masques de date

Le masque de date yy

  • Définition : Le masque yy vous permet de saisir une année à deux chiffres.
  • Interprétation : Oracle suppose automatiquement que les deux chiffres concernent le siècle en cours.
    • Par exemple, si l’année en cours est 2023, une date comme 01/05/81 serait interprétée comme l’année 2081.
  • Cas d’utilisation : Cela peut entraîner des résultats inattendus, en particulier pour les dates se référant au 20ème siècle.

Le masque de date rr

  • Définition : Le masque rr accepte également des années à deux chiffres mais utilise une méthode différente pour les interpréter.
  • Interprétation : Les années à deux chiffres sont arrondies pour déterminer l’année complète :
    • 50-99 : Considérées comme les années 1950-1999.
    • 00-49 : Considérées comme les années 2000-2049.
  • Exemple : Ainsi, 01/05/81 serait interprété comme 1981, ce qui est probablement la référence souhaitée dans la plupart des cas.

Récapitulatif des exemples

Voici un récapitulatif de la façon dont ces masques affectent la sortie :

  • La requête utilisant yy :
    • Suppose que 01/05/81 est 2081, ce qui n’a probablement pas d’embauches correspondantes.
  • La requête utilisant rr :
    • Interprète la même date comme 1981, qui a vraisemblablement des enregistrements d’embauche dans la table emp.

Conclusion

Comprendre les différences entre yy et rr est crucial lors de l’écriture de requêtes Oracle SQL impliquant des dates. Alors que yy peut entraîner une mauvaise interprétation des années futures, le masque rr offre une approche plus sensée pour convertir les années à deux chiffres grâce à ses règles d’arrondi.

Choisir le bon masque peut vous éviter d’exclure involontairement des données et garantir que vos requêtes SQL produisent les résultats souhaités. Pour la plupart des cas concernant des données historiques, le masque rr est recommandé pour plus de clarté et de précision.

Assurez-vous toujours de considérer le contexte de vos données et l’année en cours lors de l’utilisation d’années à deux chiffres pour éviter les pièges et les erreurs d’interprétation.