AdvancedDate & Time Functions

Business days calculation (excluding weekends)

The query

SQL
SELECT
  start_date,
  end_date,
  (end_date - start_date) AS calendar_days,
  -- Business days (rough calculation)
  (end_date - start_date)
  - (FLOOR((EXTRACT(DOW FROM start_date) + (end_date - start_date)) / 7) * 2)::INT
  + CASE WHEN EXTRACT(DOW FROM start_date) = 0 THEN 1 ELSE 0 END
  + CASE WHEN EXTRACT(DOW FROM end_date) = 6 THEN -1 ELSE 0 END AS business_days
FROM projects;
Tested against PostgreSQL 16

Note

Business day calculation is complex. Consider creating a calendar table for accurate results.

Tables referenced