Wochentage mit Oracles TO_CHAR()-Funktion erkennen
Das folgende Beispiel zeigt, wie du mit TO_CHAR() nur die Zeilen zurückgibst, deren Datum auf einen Wochentag fällt.
SELECT order_id, order_date
FROM orders
WHERE TO_CHAR(order_date, 'DY') NOT IN ('SAT', 'SUN');
Erwartete Ausgabe:
ORDER_ID | ORDER_DATE
---------|------------
1001 | 04-SEP-2023
1002 | 05-SEP-2023
1005 | 06-SEP-2023
1010 | 07-SEP-2023
In dieser Abfrage:
-
TO_CHAR(order_date, 'DY')extrahiert den abgekürzten Tagesnamen aus der Spalte order_date. - Die Klausel
NOT IN ('SAT', 'SUN')filtert alle Zeilen heraus, bei denen der Tag ein Samstag oder Sonntag ist.
Mit vollständigen Tagesnamen arbeiten
Wenn deine Datenbank auf ein Gebietsschema eingestellt ist, in dem die abgekürzten Tagesnamen abweichen, oder du lieber mit vollständigen Tagesnamen arbeitest, kannst du die Abfrage so anpassen:
SELECT employee_id, work_date
FROM employee_schedule
WHERE TO_CHAR(work_date, 'DAY') NOT IN ('SATURDAY', 'SUNDAY');
Erwartete Ausgabe:
EMPLOYEE_ID | WORK_DATE
------------|-----------
200 | 01-SEP-2023
201 | 02-SEP-2023
202 | 03-SEP-2023
Wochentage zwischen zwei Datumswerten filtern
Oft willst du Datensätze zwischen zwei Datumswerten abrufen, aber nur für Wochentage. So erweiterst du die Logik dafür.
Beispielabfrage: Wochentage zwischen zwei Datumswerten auswählen
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');
Erwartete Ausgabe:
INVOICE_ID | INVOICE_DATE
-----------|--------------
3001 | 01-SEP-2023
3005 | 04-SEP-2023
3007 | 05-SEP-2023
3010 | 06-SEP-2023
Umgang mit verschiedenen Sprachen und Gebietsschemas
Oracle zeigt Tagesnamen eventuell abhängig von den NLS-Einstellungen (National Language Support) deiner Session an. Ist deine Session zum Beispiel auf eine andere Sprache als Englisch eingestellt, können die Tagesabkürzungen wie ‘MON’, ‘TUE’ anders lauten. Die aktuellen Einstellungen prüfst du mit:
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_TERRITORY';
Bei Bedarf kannst du diese Einstellungen auf Session-Ebene überschreiben, um konsistente Ergebnisse zu erhalten:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Damit wird das Territorium auf ‘AMERICA’ gesetzt, sodass Tagesnamen wie ‘MON’, ‘TUE’ usw. verwendet werden.
Die Funktion NEXT_DAY() verwenden
Manchmal möchtest du ausgehend von einem bestimmten Datum den nächsten Wochentag berechnen. Oracles Funktion NEXT_DAY() hilft dir, das nächste Vorkommen eines bestimmten Wochentags zu finden.
Beispielabfrage: Den nächsten Wochentag finden
SELECT NEXT_DAY(SYSDATE, 'MONDAY') AS next_monday
FROM dual;
Erwartete Ausgabe:
NEXT_MONDAY
------------
11-SEP-2023
In diesem Fall gibt NEXT_DAY(SYSDATE, 'MONDAY') den nächsten ‘Montag’ nach dem aktuellen Datum zurück.
Fazit
Wochentage in Oracle SQL zu filtern ist in vielen Anwendungen eine häufige Anforderung. Indem du mit der Funktion TO_CHAR() den Wochentag extrahierst und Wochenenden herausfilterst, kannst du ausschließlich mit Wochentagen arbeiten. In komplexeren Szenarien lassen sich Funktionen wie NEXT_DAY() und Datumsbereiche kombinieren, um anspruchsvollere Abfragen zu erstellen.
Weitere Artikel, die dir gefallen könnten:
Beekeeper Studio ist eine kostenlose & quelloffene Datenbank-GUI
Das beste SQL-Abfrage- & Editor-Tool, das ich je benutzt habe. Es bietet alles, was ich zum Verwalten meiner Datenbank brauche. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio ist schnell, intuitiv und einfach zu bedienen. Beekeeper unterstützt jede Menge Datenbanken und läuft hervorragend auf Windows, Mac und Linux.
Was Nutzer über Beekeeper Studio sagen
„Beekeeper Studio hat meinen alten SQL-Workflow komplett ersetzt. Es ist schnell, intuitiv und macht die Arbeit mit Datenbanken wieder zum Vergnügen.“
„Ich habe viele Datenbank-GUIs ausprobiert, aber Beekeeper findet die perfekte Balance zwischen Funktionsumfang und Einfachheit. Es funktioniert einfach.“