> 데이터 베이스 > MySQL 튜토리얼 > 0 값이 있는 누락된 날짜를 포함하여 SQL에서 전체 날짜 범위를 생성하는 방법은 무엇입니까?

0 값이 있는 누락된 날짜를 포함하여 SQL에서 전체 날짜 범위를 생성하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-29 20:35:20
원래의
204명이 탐색했습니다.

How to Generate a Complete Date Range in SQL, Including Missing Dates with Zero Values?

누락된 값이 있는 전체 날짜 범위 생성

날짜 데이터로 작업할 때 지정된 범위 내의 모든 날짜를 표시해야 하는 경우가 많습니다. 일부 날짜에 대한 기록이 누락된 경우에도 마찬가지입니다. 누락된 날짜가 관련 열에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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