Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich einen Datumsbereich in MySQL ohne Kalendertabelle?

Wie erstelle ich einen Datumsbereich in MySQL ohne Kalendertabelle?

DDD
Freigeben: 2025-01-14 11:05:42
Original
321 Leute haben es durchsucht

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

Generieren Sie auf clevere Weise einen MySQL-Datumsbereich ohne Kalendertabelle

PostgreSQLs generate_series()-Funktion kann bequem Datumsbereiche generieren. Allerdings verfügt MySQL über keine direkt äquivalente Funktion. Dieser Artikel bietet eine Lösung, die Ihnen bei der Implementierung ähnlicher Funktionen in MySQL hilft.

Herausforderung

Häufig ist es notwendig, Abfragen durchzuführen, bei denen Daten mit einem vollständigen Datumsbereich verknüpft werden. Diese Aufgabe kann jedoch mühsam sein, wenn Ihre Datenbank keine bestimmte Kalendertabelle hat.

MySQL-Lösung

Erstellen Sie einen Datumsbereich in MySQL mithilfe der bereitgestellten Beispieltabelle:

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

Beschreibung

Diese Abfrage generiert einen Datumsbereich von „01.01.2011“ bis „31.12.2011“ mithilfe der folgenden Schritte:

  1. 任意表 wird als Referenz verwendet, um einen virtuellen Zeilennummernbereich von -1 bis 364 (-1 bis 365 für Schaltjahre) zu erstellen.
  2. Die Funktion
  3. ADDDATE() fügt dem Startdatum die entsprechende Anzahl Tage hinzu.
  4. DATE_FORMAT() Die Funktion formatiert das generierte Datum in das erforderliche Format „JJJJ-MM-TT“.

Integration

Diese Abfrage kann als Unterabfrage innerhalb der Hauptabfrage verwendet werden, um sie mit Ihrer Originaltabelle zu verknüpfen. Zum Beispiel:

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

Diese Abfrage gibt die gewünschten Ergebnisse zurück, wobei Zeilen mit fehlenden Daten mit Mengenwerten „0“ gefüllt werden.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Datumsbereich in MySQL ohne Kalendertabelle?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage