Heim > Datenbank > MySQL-Tutorial > Wie kann ich mithilfe einer gespeicherten Prozedur eine Liste von Daten zwischen zwei Daten in MySQL generieren?

Wie kann ich mithilfe einer gespeicherten Prozedur eine Liste von Daten zwischen zwei Daten in MySQL generieren?

Patricia Arquette
Freigeben: 2025-01-22 04:49:09
Original
227 Leute haben es durchsucht

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

Erstellen Sie eine Liste mit Daten zwischen zwei Daten

Das Abrufen einer Liste von Daten zwischen zwei Daten ist in verschiedenen Datenverarbeitungsszenarien ein häufiger Bedarf. Standard-MySQL-Funktionen bieten nur begrenzte Optionen für diese Funktionalität.

Eine effiziente Möglichkeit, eine Datumsliste zu erstellen, besteht darin, eine gespeicherte Prozedur zum Füllen einer temporären Tabelle zu verwenden. Hier ist ein detaillierter Prozess verfügbar:

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;
Nach dem Login kopieren

Verwendung:

  1. Rufen Sie die gespeicherte Prozedur make_intervals unter Verwendung des Startdatums, des Enddatums, der Intervalllänge und der Intervalleinheit auf. Um beispielsweise das tägliche Intervall zwischen „01.01.2009 00:00:00“ und „10.01.2009 00:00:00“ zu generieren, rufen Sie Folgendes auf:
CALL make_intervals('2009-01-01 00:00:00', '2009-01-10 00:00:00', 1, 'DAY');
Nach dem Login kopieren
  1. Verknüpfen Sie Ihre Datentabelle mit der Tabelle time_intervals, um Daten basierend auf Datumsintervallen zu aggregieren. Zum Beispiel:
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;
Nach dem Login kopieren

Beispielausgabe:

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

Diese Methode bietet eine flexible Möglichkeit, eine Liste von Daten zwischen zwei angegebenen Daten zu erstellen und ermöglicht so eine bequeme und effiziente Datenaggregation basierend auf Datumsintervallen.

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

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