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ée2081
.
- Par exemple, si l’année en cours est 2023, une date comme
- 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
.
- 50-99 : Considérées comme les années
- Exemple : Ainsi,
01/05/81
serait interprété comme1981
, 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
est2081
, ce qui n’a probablement pas d’embauches correspondantes.
- Suppose que
- La requête utilisant
rr
:- Interprète la même date comme
1981
, qui a vraisemblablement des enregistrements d’embauche dans la tableemp
.
- Interprète la même date comme
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.