Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich in MySQL eine Liste von Daten zwischen zwei Daten?

Wie erstelle ich in MySQL eine Liste von Daten zwischen zwei Daten?

Mary-Kate Olsen
Freigeben: 2025-01-22 04:33:08
Original
407 Leute haben es durchsucht

How to Generate a List of Dates Between Two Dates in MySQL?

Erstellen Sie eine Liste mit Daten zwischen zwei Daten

Um eine Liste der Daten zwischen zwei bestimmten Daten zu erhalten, sollten Sie eine gespeicherte Prozedur wie make_intervals verwenden, um eine temporäre Tabelle time_intervals zu erstellen, die mit den erforderlichen Intervallen gefüllt ist. Anschließend können Sie die Datentabelle mit der Tabelle time_intervals verknüpfen, um die gewünschte Ausgabe zu erhalten.

make_intervalsGespeicherte Prozedur (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>
Nach dem Login kopieren

Anwendungsbeispiele

Um beispielsweise eine Liste mit Daten zwischen dem 1. Januar 2009 und dem 13. Januar 2009 zu erstellen, würden Sie die gespeicherte Prozedur make_intervals wie folgt aufrufen:

<code class="language-sql">call make_intervals('2009-01-01 00:00:00', '2009-01-13 00:00:00', 1, 'DAY');</code>
Nach dem Login kopieren

Dadurch wird die Tabelle time_intervals mit Intervallen gefüllt, die jeden Tag im angegebenen Datumsbereich darstellen. Anschließend können Sie die Datentabelle mit der Tabelle time_intervals verknüpfen, um die Daten basierend auf diesen Intervallen zusammenzufassen.

Das obige ist der detaillierte Inhalt vonWie erstelle ich in MySQL eine Liste von Daten zwischen zwei Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage