누락된 값이 있는 전체 날짜 범위 생성
날짜 데이터로 작업할 때 지정된 범위 내의 모든 날짜를 표시해야 하는 경우가 많습니다. 일부 날짜에 대한 기록이 누락된 경우에도 마찬가지입니다. 누락된 날짜가 관련 열에 0 값을 표시하도록 SQL에서 이를 어떻게 달성합니까?
샘플 날짜 데이터가 포함된 다음 테이블 @temp를 고려하십시오.
INSERT INTO @temp SELECT '10/2/2012', 1 INSERT INTO @temp SELECT '10/3/2012', 1 INSERT INTO @temp SELECT '10/5/2012', 1 INSERT INTO @temp SELECT '10/7/2012', 2 INSERT INTO @temp SELECT '10/9/2012', 2 INSERT INTO @temp SELECT '10/10/2012', 2 INSERT INTO @temp SELECT '10/13/2012', 2 INSERT INTO @temp SELECT '10/15/2012', 2
검색하려면 지정된 두 날짜 사이의 모든 날짜에 대해 다음 쿼리를 사용할 수 있습니다.
SELECT * FROM @temp WHERE CDate BETWEEN '10/01/2012' AND '10/15/2012'
그러나 이 쿼리는 해당 날짜 범위 내의 기존 레코드만 반환합니다. 0 값이 있는 누락된 날짜를 포함하려면 전체 날짜 범위를 생성하고 이를 기존 데이터와 결합해야 합니다.
;WITH d(date) AS ( SELECT CAST('10/01/2012' AS DATETIME) UNION ALL SELECT DATE + 1 FROM d WHERE DATE < '10/15/2012' ) SELECT t.ID, d.date CDate, ISNULL(t.val, 0) AS val FROM d LEFT JOIN temp t ON t.CDate = d.date ORDER BY d.date OPTION (MAXRECURSION 0) -- Use this if your dates are >99 days apart
MAXRECURSION 숫자 옵션은 재귀 반복 횟수를 제한하여 쿼리가 성공적으로 완료되도록 합니다. . ISNULL 함수는 val 열의 모든 null 값을 0으로 바꿉니다.
이 접근 방식을 사용하면 지정된 범위 내의 모든 날짜가 누락된 값이 0으로 표시되도록 할 수 있습니다.
위 내용은 0 값이 있는 누락된 날짜를 포함하여 SQL에서 전체 날짜 범위를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!