> 데이터 베이스 > MySQL 튜토리얼 > SQL에서 겹치는 날짜 범위를 효율적으로 식별할 수 있는 방법은 무엇입니까?

SQL에서 겹치는 날짜 범위를 효율적으로 식별할 수 있는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-18 08:13:08
원래의
497명이 탐색했습니다.

How Can We Efficiently Identify Overlapping Date Ranges in SQL?

SQL 날짜 범위 비교

데이터베이스에 저장된 날짜 범위로 작업할 때 특정 날짜 범위가 기존 범위와 겹치는지 확인해야 할 수 있습니다. 이는 SQL 데이터베이스에서 반복되는 문제입니다.

이 문제를 해결하는 한 가지 방법은 비교 논리를 뒤집는 것입니다. 주어진 범위와 겹치는 범위를 찾는 대신 겹치지 않는 범위를 찾고 있습니다. 겹치지 않는 기간을 식별함으로써 나머지 기간은 겹치는 기간이라는 결론을 내릴 수 있습니다.

이 논리를 설명하기 위해 다음 예를 살펴보겠습니다.

<code>           |-------------------|          与之比较
               |---------|                包含在内
           |----------|                   包含在内,起始时间相同
                   |-----------|          包含在内,结束时间相同
           |-------------------|          包含在内,起始和结束时间相同
     |------------|                       未完全包含,起始时间重叠
                   |---------------|      未完全包含,结束时间重叠
     |-------------------------|          起始时间重叠,范围更大
           |-----------------------|      结束时间重叠,范围更大
     |------------------------------|     完全重叠</code>
로그인 후 복사

그림에서 알 수 있듯이 비교 기간과 겹치지 않는 기간은 비교 기간이 끝난 후에 시작되거나 비교 기간이 시작되기 전에 종료됩니다.

반대로, 비교 기간과 겹치는 기간은 다음 범주에 속합니다.

  • 비교기간에 포함
  • 비교 기간 내에 포함되며 시작 시간이나 종료 시간이 동일합니다
  • 비교 기간의 시작 또는 종료 시간과 겹칩니다
  • 완전히 겹치는 비교기간

이 논리를 SQL로 변환하면 다음 쿼리를 사용하여 특정 확인 에포크와 겹치는 모든 에포크를 검색할 수 있습니다.

<code class="language-sql">SELECT *
FROM periods
WHERE range_start < @check_period_end AND range_end > @check_period_start;</code>
로그인 후 복사

겹치지 않는 에포크를 찾는 논리를 반대로 함으로써 이러한 에포크를 효과적으로 식별하고 결과에서 제외하여 일치하는 에포크 목록을 남길 수 있습니다.

위 내용은 SQL에서 겹치는 날짜 범위를 효율적으로 식별할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿