Подсчет выходных дней между двумя датами в SQL: методы и примеры

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

Метод 1: использование рекурсивного CTE

WITH recursive cte AS (
  SELECT date1 AS date
  FROM your_table
  UNION ALL
  SELECT date + INTERVAL 1 DAY
  FROM cte
  WHERE date + INTERVAL 1 DAY <= date2
)
SELECT COUNT(*)
FROM cte
WHERE DAYOFWEEK(date) IN (1, 7);

Этот метод использует рекурсивное общее табличное выражение (CTE) для создания ряда дат между заданной датой начала (date1) и датой окончания (date2). Затем функция DAYOFWEEKиспользуется для фильтрации и подсчета выходных дней (воскресенье = 1, суббота = 7).

Метод 2. Использование календарной таблицы

SELECT COUNT(*)
FROM calendar_table
WHERE date BETWEEN date1 AND date2
  AND DAYOFWEEK(date) IN (1, 7);

В этом методе вам потребуется предварительно заполненная таблица календаря, содержащая все возможные даты. Затем вы можете использовать эту таблицу, чтобы отфильтровать нужный диапазон дат и подсчитать выходные дни.

Метод 3: использование DATEPART (для SQL Server)

SELECT COUNT(*)
FROM your_table
WHERE date >= date1 AND date <= date2
  AND DATEPART(dw, date) IN (1, 7);

Если вы используете SQL Server, вы можете использовать функцию DATEPARTс параметром dw, чтобы извлечь день недели (воскресенье = 1, суббота = 7). ) с даты. Этот метод фильтрует диапазон дат и подсчитывает выходные дни.

Обратите внимание, что фактические имена таблиц и столбцов могут различаться в зависимости от схемы вашей базы данных.