집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 날짜 범위를 효율적으로 검색하는 방법은 무엇입니까?
목표는 시작 날짜부터 종료 날짜까지 지정된 범위에 있는 모든 날짜의 전체 목록을 얻는 것입니다. 이 정보는 후속 처리를 위해 커서에 저장됩니다.
이 작업을 수행하기 위해 재귀 공통 테이블 표현식(CTE)을 사용하는 쿼리가 구현됩니다.
<code class="language-sql">;with GetDates As ( select DATEADD(day,1,@maxDate) as TheDate UNION ALL select DATEADD(day,1, TheDate) from GetDates where TheDate < @minDate ) SELECT TheDate FROM GetDates</code>
그러나 CTE 결과로 커서를 채우는 동안 오류가 발생했습니다.
<code class="language-sql">SET @DateCurSor = CURSOR FOR SELECT TheDate FROM GetDates</code>
오류 메시지에는 "SET" 키워드 근처에 구문 오류가 있음이 명시되어 있습니다.
또 다른 방법으로 달력을 활용하는 것도 추천합니다. 달력 테이블이 존재하지 않는 경우에도 쉽게 생성할 수 있습니다. 이 테이블은 날짜를 표 형식으로 표현하여 검색 프로세스를 크게 단순화합니다.
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date <= @MaxDate;</code>
캘린더 테이블이 없는 경우 시스템 테이블 sys.all_objects와 관련된 간단한 절차가 제공됩니다.
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) FROM sys.all_objects a CROSS JOIN sys.all_objects b;</code>
SQL Server에서는 커서를 사용하는 것이 일반적으로 권장되지 않습니다. 대조적으로, 집합 기반 연산은 뛰어난 성능으로 인해 더 많이 사용됩니다. 설명된 시나리오에서는 커서를 사용하지 않고도 특정 날짜에 특정 항목의 수량을 결정하는 작업을 수행할 수 있습니다.
<code class="language-sql">SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date BETWEEN @MinDate AND @MaxDate;</code>
위 내용은 SQL Server에서 날짜 범위를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!