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>
Beschreibung
Diese Abfrage generiert einen Datumsbereich von „01.01.2011“ bis „31.12.2011“ mithilfe der folgenden Schritte:
任意表
wird als Referenz verwendet, um einen virtuellen Zeilennummernbereich von -1 bis 364 (-1 bis 365 für Schaltjahre) zu erstellen. ADDDATE()
fügt dem Startdatum die entsprechende Anzahl Tage hinzu. 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>
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!