주어진 두 날짜 사이의 날짜 목록을 얻으려면 make_intervals
과 같은 저장 프로시저를 사용하여 필요한 간격으로 채워지는 임시 테이블 time_intervals
을 만드는 것을 고려해 보세요. 그런 다음 데이터 테이블을 time_intervals
테이블과 조인하여 원하는 출력을 얻을 수 있습니다.
make_intervals
저장 프로시저(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 -- 根据单位和区间计算下一个区间日期 select case unitval when 'MICROSECOND' then timestampadd(MICROSECOND, intval, thisDate) when 'SECOND' then timestampadd(SECOND, intval, thisDate) when 'MINUTE' then timestampadd(MINUTE, intval, thisDate) when 'HOUR' then timestampadd(HOUR, intval, thisDate) when 'DAY' then timestampadd(DAY, intval, thisDate) when 'WEEK' then timestampadd(WEEK, intval, thisDate) when 'MONTH' then timestampadd(MONTH, intval, thisDate) when 'QUARTER' then timestampadd(QUARTER, intval, thisDate) when 'YEAR' then timestampadd(YEAR, intval, thisDate) end into nextDate; -- 将当前区间插入到临时表中 insert into time_intervals select thisDate, timestampadd(MICROSECOND, -1, nextDate); set thisDate = nextDate; -- 继续直到当前日期达到或超过结束日期 until thisDate >= enddate end repeat; END;</code>
예를 들어 2009년 1월 1일부터 2009년 1월 13일 사이의 날짜 목록을 만들려면 다음과 같이 make_intervals
저장 프로시저를 호출합니다.
<code class="language-sql">call make_intervals('2009-01-01 00:00:00', '2009-01-13 00:00:00', 1, 'DAY');</code>
이렇게 하면 time_intervals
테이블이 지정된 날짜 범위의 각 날짜를 나타내는 간격으로 채워집니다. 그런 다음 데이터 테이블을 time_intervals
테이블과 조인하여 이러한 간격을 기준으로 데이터를 요약할 수 있습니다.
위 내용은 MySQL에서 두 날짜 사이의 날짜 목록을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!