Identificare i giorni feriali con la funzione TO_CHAR() di Oracle
L'esempio seguente mostra come usare TO_CHAR() per restituire solo le righe in cui la data cade in un giorno feriale.
SELECT order_id, order_date
FROM orders
WHERE TO_CHAR(order_date, 'DY') NOT IN ('SAT', 'SUN');
Output previsto:
ORDER_ID | ORDER_DATE
---------|------------
1001 | 04-SEP-2023
1002 | 05-SEP-2023
1005 | 06-SEP-2023
1010 | 07-SEP-2023
In questa query:
-
TO_CHAR(order_date, 'DY')estrae il nome abbreviato del giorno dalla colonna order_date. - La clausola
NOT IN ('SAT', 'SUN')esclude tutte le righe in cui il giorno è sabato o domenica.
Usare i nomi completi dei giorni
Se il tuo database usa una locale in cui i nomi abbreviati dei giorni sono diversi, o preferisci lavorare con i nomi completi, puoi modificare la query così:
SELECT employee_id, work_date
FROM employee_schedule
WHERE TO_CHAR(work_date, 'DAY') NOT IN ('SATURDAY', 'SUNDAY');
Output previsto:
EMPLOYEE_ID | WORK_DATE
------------|-----------
200 | 01-SEP-2023
201 | 02-SEP-2023
202 | 03-SEP-2023
Filtrare i giorni feriali tra due date
Spesso ti servirà recuperare i record compresi tra due date, ma solo nei giorni feriali. Ecco come estendere la logica per farlo.
Query di esempio: selezionare i giorni feriali tra due date
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');
Output previsto:
INVOICE_ID | INVOICE_DATE
-----------|--------------
3001 | 01-SEP-2023
3005 | 04-SEP-2023
3007 | 05-SEP-2023
3010 | 06-SEP-2023
Gestire lingue e locale diverse
Oracle può mostrare i nomi dei giorni in base alle impostazioni NLS (National Language Support) della tua sessione. Ad esempio, se la sessione è impostata su una lingua diversa dall'inglese, le abbreviazioni come ‘MON’, ‘TUE’ potrebbero essere diverse. Puoi controllare le impostazioni correnti eseguendo:
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_TERRITORY';
Se necessario, puoi sovrascrivere queste impostazioni a livello di sessione per ottenere risultati coerenti:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
Questo imposta il territorio su ‘AMERICA’, garantendo l'uso di nomi dei giorni come ‘MON’, ‘TUE’ e così via.
Usare la funzione NEXT_DAY()
A volte potresti voler calcolare il prossimo giorno feriale a partire da una data. La funzione NEXT_DAY() di Oracle ti aiuta a trovare la prossima occorrenza di un determinato giorno della settimana.
Query di esempio: trovare il prossimo giorno feriale
SELECT NEXT_DAY(SYSDATE, 'MONDAY') AS next_monday
FROM dual;
Output previsto:
NEXT_MONDAY
------------
11-SEP-2023
In questo caso, NEXT_DAY(SYSDATE, 'MONDAY') restituisce il prossimo ‘lunedì’ successivo alla data corrente.
Conclusione
Filtrare i giorni feriali in Oracle SQL è un'esigenza comune in molte applicazioni. Usando la funzione TO_CHAR() per estrarre il giorno della settimana ed escludendo i weekend, puoi lavorare solo con i giorni feriali. Negli scenari più complessi, funzioni come NEXT_DAY() e intervalli di date si possono combinare per creare query più sofisticate.
Altri articoli che potrebbero piacerti:
Beekeeper Studio è una GUI per database gratuita & open source
Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.
Cosa dicono gli utenti di Beekeeper Studio
"Beekeeper Studio ha sostituito completamente il mio vecchio flusso di lavoro SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
"Ho provato molte GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."