>데이터 베이스 >MySQL 튜토리얼 >휴일 테이블을 사용하지 않고 MySQL에서 두 날짜 사이의 영업일을 어떻게 효율적으로 계산할 수 있습니까?

휴일 테이블을 사용하지 않고 MySQL에서 두 날짜 사이의 영업일을 어떻게 효율적으로 계산할 수 있습니까?

DDD
DDD원래의
2025-01-16 17:54:12414검색

How Can I Efficiently Calculate Business Days Between Two Dates in MySQL Without Using a Holiday Table?

MySQL 근무일 계산 기능

Excel의 NETWORKDAYS() 함수는 지정된 두 날짜 사이의 근무일 수를 효율적으로 계산할 수 있습니다. MySQL에서는 유사한 기능이 필요한 경우가 많으며, 특히 단순성을 위해 휴일을 제외하는 기능이 필요합니다.

한 가지 방법은 다음 표현을 사용하는 것입니다.

<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>

이 표현을 효과적으로 사용하려면:

  1. 종료 날짜(@E)가 시작 날짜(@S)보다 빠르지 않은지 확인하세요.
  2. 이 표현식은 DATEDIFF와 같이 작동합니다. 시작 날짜와 종료 날짜가 동일하면 영업일이 0이 됩니다.
  3. 이 방법에는 휴일이 포함되지 않습니다.

제공된 숫자 문자열은 월요일부터 시작하여 행과 열로 배열된 시작 및 종료 날짜 테이블을 생성하여 구성됩니다. 테이블은 대각선 방향으로 0으로 채워져 동일한 요일 유형 간에 근무일이 없음을 나타냅니다(예: 월요일부터 월요일까지).

일별 근무일수는 오른쪽 행을 따라 대각선으로 이동하여 계산됩니다. 휴무일(주말)이 발생하는 경우 숫자는 변경되지 않습니다. 그렇지 않으면 1씩 증가합니다. 라인의 끝에 도달하면 카운터가 재설정되고 대각선에 다시 도달할 때까지 프로세스가 계속됩니다.

예를 들어 토요일과 일요일이 휴무일이라고 가정하면 다음과 같습니다.

M T W T F S S
M 0 1 2 3 4 4 4
T 4 0 1 2 3 3 3
W 3 4 0 1 2 2 2
T 2 3 4 0 1 1 1
F 1 2 3 4 0 0 0
S 0 1 2 3 4 0 0
S 0 1 2 3 4 4 0

이 테이블의 49개 값을 연결하면 표현식에 사용되는 문자열이 생성됩니다.

이 솔루션은 휴일을 고려하지 않지만 MySQL에서 두 날짜 사이의 영업일 수를 효율적으로 계산할 수 있습니다.

위 내용은 휴일 테이블을 사용하지 않고 MySQL에서 두 날짜 사이의 영업일을 어떻게 효율적으로 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.