>데이터 베이스 >MySQL 튜토리얼 >달력 테이블 없이 MySQL에서 날짜 범위를 생성하는 방법은 무엇입니까?

달력 테이블 없이 MySQL에서 날짜 범위를 생성하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-14 11:05:42325검색

How to Generate a Date Range in MySQL Without a Calendar Table?

달력 테이블 없이 MySQL 날짜 범위를 영리하게 생성

PostgreSQL의 generate_series() 함수를 사용하면 날짜 범위를 편리하게 생성할 수 있습니다. 그러나 MySQL에는 직접적으로 동등한 기능이 없습니다. 이 문서에서는 MySQL에서 유사한 기능을 구현하는 데 도움이 되는 솔루션을 제공합니다.

도전

전체 날짜 범위의 데이터를 결합하는 쿼리를 수행해야 하는 경우가 많습니다. 그러나 데이터베이스에 특정 달력 테이블이 없으면 이 작업이 지루할 수 있습니다.

MySQL 솔루션

제공된 예제 테이블을 사용하여 MySQL에서 날짜 범위를 만듭니다.

<code class="language-sql">SELECT 
    DATE_FORMAT(
        ADDDATE('2011-1-1', @num := @num + 1), 
        '%Y-%m-%d'
    ) AS 日期
FROM 
    任意表,    
    (SELECT @num := -1) AS num
LIMIT 
    365;</code>

설명

이 쿼리는 다음 단계를 사용하여 '2011-01-01'부터 '2011-12-31'까지의 날짜 범위를 생성합니다.

  1. 任意表은 -1~364(윤년의 경우 -1~365) 범위의 가상 줄 번호를 생성하기 위한 참조로 사용됩니다.
  2. ADDDATE() 함수는 시작일에 적절한 일수를 추가합니다.
  3. DATE_FORMAT() 이 함수는 생성된 날짜를 필수 'YYYY-MM-DD' 형식으로 지정합니다.

통합

이 쿼리는 기본 쿼리 내의 하위 쿼리로 사용되어 원본 테이블과 조인할 수 있습니다. 예:

<code class="language-sql">SELECT 
    t.日期, 
    COALESCE(d.qty, 0) AS qty
FROM 
    (
        SELECT 
            DATE_FORMAT(
                ADDDATE('2011-1-1', @num := @num + 1), 
                '%Y-%m-%d'
            ) AS 日期
        FROM 
            任意表,    
            (SELECT @num := -1) AS num
        LIMIT 
            365
    ) AS t
LEFT JOIN 
    原始表 AS d 
ON 
    t.日期 = d.日期;</code>

이 쿼리는 날짜가 누락된 행이 '0' 수량 값으로 채워지는 원하는 결과를 반환합니다.

위 내용은 달력 테이블 없이 MySQL에서 날짜 범위를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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