🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
9 settembre 2024 Di Matthew Rathbone

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.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

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."
— Alex K., sviluppatore di database
★★★★★
"Ho provato molte GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo flusso di lavoro SQL?

download Scarica gratis