Вычисление количества дней недели между двумя датами в Oracle: методы и примеры кода

Чтобы вычислить количество дней между двумя датами без учета выходных в Oracle, вы можете использовать различные методы. Вот несколько подходов с примерами кода:

Метод 1: использование функций TRUNC и LEVEL

SELECT COUNT(*)
FROM (
  SELECT TRUNC(start_date + LEVEL) AS date_value
  FROM dual
  CONNECT BY LEVEL <= (end_date - start_date) + 1
)
WHERE TO_CHAR(date_value, 'D') NOT IN (1, 7);

Метод 2: использование функции NUMTODSINTERVAL

SELECT TRUNC(end_date) - TRUNC(start_date) - 
       (2 * (TRUNC(end_date, 'IW') - TRUNC(start_date, 'IW'))) AS num_days
FROM dual;

Метод 3: использование функции PL/SQL

CREATE OR REPLACE FUNCTION count_weekdays(start_date DATE, end_date DATE) RETURN NUMBER IS
  num_days NUMBER := end_date - start_date + 1;
BEGIN
  FOR i IN 0..num_days LOOP
    IF TO_CHAR(start_date + i, 'D') IN (1, 7) THEN
      num_days := num_days - 1;
    END IF;
  END LOOP;
  RETURN num_days;
END;

Вы можете использовать эту функцию следующим образом:

SELECT count_weekdays(start_date, end_date) AS num_days FROM dual;

Метод 4: использование функций INTERVAL и EXTRACT

SELECT EXTRACT(DAY FROM (end_date - start_date)) - 
       (2 * EXTRACT(WEEK FROM (end_date - start_date))) AS num_days
FROM dual;