🧚 Écoute ! Beekeeper Studio est une interface de base de données rapide, moderne et open source Télécharger
9 septembre 2024 Par Matthew Rathbone

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.

La version Linux de Beekeeper est 100% complète : rien de bâclé, aucun compromis sur les fonctionnalités.

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. »
— Alex K., développeur de bases de données
★★★★★
« 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. »
— Sarah M., ingénieure full stack