> 데이터 베이스 > MySQL 튜토리얼 > 저장 프로시저를 사용하여 MySQL에서 두 날짜 사이의 날짜 목록을 어떻게 생성할 수 있습니까?

저장 프로시저를 사용하여 MySQL에서 두 날짜 사이의 날짜 목록을 어떻게 생성할 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-22 04:49:09
원래의
162명이 탐색했습니다.

How Can I Generate a List of Dates Between Two Dates in MySQL Using a Stored Procedure?

두 날짜 사이의 날짜 목록 생성

두 날짜 사이의 날짜 목록을 가져오는 것은 다양한 데이터 처리 시나리오에서 일반적으로 필요합니다. 표준 MySQL 함수에는 이 기능에 대한 옵션이 제한되어 있습니다.

날짜 목록을 생성하는 효율적인 방법은 저장 프로시저를 활용하여 임시 테이블을 채우는 것입니다. 자세한 프로세스는 다음과 같습니다.

<code class="language-sql">CREATE PROCEDURE make_intervals(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10))
BEGIN
    DECLARE thisDate timestamp;
    DECLARE nextDate timestamp;
    SET thisDate = startdate;

    DROP TEMPORARY TABLE IF EXISTS time_intervals;
    CREATE TEMPORARY TABLE IF NOT EXISTS time_intervals
        (
        interval_start timestamp,
        interval_end timestamp
        );

    REPEAT
        CASE unitval
            WHEN 'MICROSECOND' THEN SET nextDate = TIMESTAMPADD(MICROSECOND, intval, thisDate)
            WHEN 'SECOND' THEN SET nextDate = TIMESTAMPADD(SECOND, intval, thisDate)
            WHEN 'MINUTE' THEN SET nextDate = TIMESTAMPADD(MINUTE, intval, thisDate)
            WHEN 'HOUR' THEN SET nextDate = TIMESTAMPADD(HOUR, intval, thisDate)
            WHEN 'DAY' THEN SET nextDate = TIMESTAMPADD(DAY, intval, thisDate)
            WHEN 'WEEK' THEN SET nextDate = TIMESTAMPADD(WEEK, intval, thisDate)
            WHEN 'MONTH' THEN SET nextDate = TIMESTAMPADD(MONTH, intval, thisDate)
            WHEN 'QUARTER' THEN SET nextDate = TIMESTAMPADD(QUARTER, intval, thisDate)
            WHEN 'YEAR' THEN SET nextDate = TIMESTAMPADD(YEAR, intval, thisDate)
        END;

        INSERT INTO time_intervals SELECT thisDate, TIMESTAMPADD(MICROSECOND, -1, nextDate);
        SET thisDate = nextDate;
    UNTIL thisDate >= enddate
    END REPEAT;

END;</code>
로그인 후 복사

사용법:

  1. 시작 날짜, 종료 날짜, 간격 길이 및 간격 단위를 사용하여 make_intervals 저장 프로시저를 호출합니다. 예를 들어 '2009-01-01 00:00:00'과 '2009-01-10 00:00:00' 사이의 일일 간격을 생성하려면 다음을 호출하세요.
<code class="language-sql">CALL make_intervals('2009-01-01 00:00:00', '2009-01-10 00:00:00', 1, 'DAY');</code>
로그인 후 복사
  1. 데이터 테이블을 time_intervals 테이블과 결합하여 날짜 간격을 기준으로 데이터를 집계합니다. 예:
<code class="language-sql">SELECT
    aggregate_function(your_data_table.column_name) AS aggregated_value,
    time_intervals.interval_start AS date
FROM your_data_table
LEFT JOIN time_intervals ON (your_data_table.date_column BETWEEN time_intervals.interval_start AND time_intervals.interval_end)
GROUP BY time_intervals.interval_start;</code>
로그인 후 복사

출력 예:

<code>+----------------------------+----------+
| aggregated_value | date       |
+----------------------------+----------+
| 值1                  | 2009-01-01 |
| 值2                  | 2009-01-02 |
| 值3                  | 2009-01-03 |
| 值4                  | 2009-01-04 |
| 值5                  | 2009-01-05 |
| 值6                  | 2009-01-06 |
| 值7                  | 2009-01-07 |
| 值8                  | 2009-01-08 |
| 值9                  | 2009-01-09 |
+----------------------------+----------+</code>
로그인 후 복사

이 방법은 지정된 두 날짜 사이의 날짜 목록을 생성하는 유연한 방법을 제공하므로 날짜 간격을 기준으로 편리하고 효율적인 데이터 집계가 가능합니다.

위 내용은 저장 프로시저를 사용하여 MySQL에서 두 날짜 사이의 날짜 목록을 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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