>데이터 베이스 >MySQL 튜토리얼 >SQL에서 날짜 범위를 효율적으로 생성하는 방법은 무엇입니까?

SQL에서 날짜 범위를 효율적으로 생성하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-23 17:22:13173검색

How to Efficiently Generate a Date Range in SQL?

SQL 날짜 범위 생성 기술

SQL에서 지정된 범위 내의 날짜 목록을 생성하는 방법은 여러 가지가 있습니다. 이 기사에서는 효율적인 솔루션을 소개하기 위한 예로 '2010-01-20'에서 '2010-01-24'까지의 날짜 시퀀스 생성을 사용합니다.

이 방법은 하위 쿼리를 사용하여 완전한 날짜 컬렉션을 생성합니다. 4개의 중첩 루프 조합을 통해 하위 쿼리는 최대 10,000일까지의 날짜 시퀀스를 효율적으로 생성할 수 있으며 더 긴 날짜 범위로 쉽게 확장할 수 있습니다.

<code class="language-sql">select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d</code>

그런 다음 생성된 날짜 목록을 필터링하여 대상 범위 내의 날짜를 추출합니다.

<code class="language-sql">select a.Date
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (...) as a
) a
where a.Date between '2010-01-20' and '2010-01-24'</code>

이 접근 방식의 장점은 루프, 저장 프로시저 또는 임시 테이블이 필요하지 않고 효율적이며 여러 데이터베이스 플랫폼에 이식 가능하다는 것입니다. 10,000일의 날짜를 생성하는 데는 0.01초도 채 걸리지 않으며, 약 100,000일의 날짜를 생성하더라도 여전히 성능이 뛰어납니다.

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

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