SQL Dojo Beta
Tecnica

Contare i giorni lavorativi

Costruisci una volta i giorni lavorativi (niente weekend, niente festivi), poi contali tra due date.

generate_series sul periodo, EXTRACT(ISODOW FROM day) <= 5 e NOT EXISTS un festivo: questo è il calendario. Conta i suoi giorni con day > start AND day <= end. La scorciatoia "giorni feriali meno festivi" sottrae due volte un festivo che cade nel weekend. Nei progetti reali il calendario è una tabella, con is_business_day per paese.

WITH days AS (
  SELECT CAST(d AS DATE) AS day
  FROM generate_series(DATE '2025-12-22', DATE '2025-12-31', INTERVAL '1 day') AS t(d)
),
holidays(day) AS (VALUES (DATE '2025-12-25'))
SELECT COUNT(*) AS calendar_days,
       SUM(CASE WHEN EXTRACT(ISODOW FROM day) <= 5
                 AND day NOT IN (SELECT day FROM holidays) THEN 1 ELSE 0 END) AS business_days
FROM days;
calendar_daysbusiness_days
107
Provalo in Randori