Identifier les jours de semaine avec la fonction TO_CHAR() d’Oracle
L’exemple suivant montre comment utiliser TO_CHAR() pour ne renvoyer que les lignes dont la date tombe un jour de semaine.
SELECT order_id, order_date
FROM orders
WHERE TO_CHAR(order_date, 'DY') NOT IN ('SAT', 'SUN');
Résultat attendu :
ORDER_ID | ORDER_DATE
---------|------------
1001 | 04-SEP-2023
1002 | 05-SEP-2023
1005 | 06-SEP-2023
1010 | 07-SEP-2023
Dans cette requête :
-
TO_CHAR(order_date, 'DY')extrait le nom abrégé du jour depuis la colonne order_date. - La clause
NOT IN ('SAT', 'SUN')exclut toutes les lignes dont le jour est un samedi ou un dimanche.
Travailler avec les noms de jours complets
Si ta base de données utilise une locale où les noms de jours abrégés sont différents, ou si tu préfères travailler avec les noms complets, tu peux modifier la requête ainsi :
SELECT employee_id, work_date
FROM employee_schedule
WHERE TO_CHAR(work_date, 'DAY') NOT IN ('SATURDAY', 'SUNDAY');
Résultat attendu :
EMPLOYEE_ID | WORK_DATE
------------|-----------
200 | 01-SEP-2023
201 | 02-SEP-2023
202 | 03-SEP-2023
Filtrer les jours de semaine entre deux dates
Souvent, tu voudras récupérer des enregistrements entre deux dates, mais uniquement pour les jours de semaine. Voici comment étendre la logique pour y parvenir.
Exemple de requête : sélectionner les jours de semaine entre deux dates
SELECT invoice_id, invoice_date
FROM invoices
WHERE invoice_date BETWEEN TO_DATE('2023-09-01', 'YYYY-MM-DD')
AND TO_DATE('2023-09-10', 'YYYY-MM-DD')
AND TO_CHAR(invoice_date, 'DY') NOT IN ('SAT', 'SUN');
Résultat attendu :
INVOICE_ID | INVOICE_DATE
-----------|--------------
3001 | 01-SEP-2023
3005 | 04-SEP-2023
3007 | 05-SEP-2023
3010 | 06-SEP-2023
Gérer les différentes langues et locales
Oracle peut afficher les noms de jours selon les paramètres NLS (National Language Support) de ta session. Par exemple, si ta session est configurée dans une autre langue que l’anglais, les abréviations comme « MON » ou « TUE » peuvent être différentes. Tu peux vérifier les paramètres actuels en exécutant :
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_TERRITORY';
Si nécessaire, tu peux remplacer ces paramètres au niveau de la session pour obtenir des résultats cohérents :
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Cela définit le territoire sur « AMERICA », ce qui garantit l’utilisation de noms de jours comme « MON », « TUE », etc.
Utiliser la fonction NEXT_DAY()
Il arrive que tu veuilles calculer le prochain jour de semaine à partir d’une date donnée. La fonction NEXT_DAY() d’Oracle t’aide à trouver la prochaine occurrence d’un jour précis.
Exemple de requête : trouver le prochain jour de semaine
SELECT NEXT_DAY(SYSDATE, 'MONDAY') AS next_monday
FROM dual;
Résultat attendu :
NEXT_MONDAY
------------
11-SEP-2023
Ici, NEXT_DAY(SYSDATE, 'MONDAY') renvoie le prochain « lundi » après la date du jour.
Conclusion
Filtrer les jours de semaine en Oracle SQL est un besoin courant dans de nombreuses applications. En utilisant la fonction TO_CHAR() pour extraire le jour de la semaine et en excluant les week-ends, tu peux travailler uniquement avec les jours de semaine. Dans des scénarios plus complexes, des fonctions comme NEXT_DAY() et des plages de dates peuvent être combinées pour créer des requêtes plus élaborées.
D’autres articles qui pourraient te plaire :
Beekeeper Studio est une interface de base de données gratuite & open source
Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.
Ce que les utilisateurs disent de Beekeeper Studio
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données agréable à nouveau. »
« J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve l’équilibre parfait entre fonctionnalités et simplicité. Ça marche, tout simplement. »