Heim >Datenbank >MySQL-Tutorial >Wie kann ich in SQL effizient eine Folge von Datumsangaben innerhalb eines bestimmten Bereichs generieren?

Wie kann ich in SQL effizient eine Folge von Datumsangaben innerhalb eines bestimmten Bereichs generieren?

DDD
DDDOriginal
2025-01-23 17:17:14955Durchsuche

How Can I Efficiently Generate a Sequence of Dates Within a Specific Range in SQL?

Effiziente Methode zum Generieren eines SQL-Datumsbereichs

Bei der Datenbankprogrammierung ist das Generieren einer Datumssequenz innerhalb eines bestimmten Datumsbereichs eine häufige Aufgabe. Fragen Sie beispielsweise die Daten zwischen dem 20. Januar 2010 und dem 24. Januar 2010 ab:

<code class="language-sql">SELECT ... AS days WHERE `date` BETWEEN '2010-01-20' AND '2010-01-24'</code>

Das erwartete Ergebnis ist:

<code>days
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24</code>

Effiziente Unterabfragelösung

Eine effiziente Lösung besteht darin, eine Unterabfrage zu verwenden, um eine Datumssequenz zu generieren:

<code class="language-sql">SELECT a.Date
FROM (
    SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY AS Date
    FROM (
        SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
    ) AS a
    CROSS JOIN (
        SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
    ) AS b
    CROSS JOIN (
        SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
    ) AS c
    CROSS JOIN (
        SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
    ) AS d
) a
WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24'</code>

Leistungsüberlegungen

Diese Lösung ist äußerst leistungsfähig, mit einer Abfrageausführungszeit von nur 0,0009 Sekunden. Selbst bei der Generierung von 100.000 Daten (ca. 274 Jahre) beträgt die Ausführungszeit der Abfrage nur 0,0458 Sekunden.

Portabilität

Diese Technologie ist hochgradig portierbar und kann mit nur geringfügigen Anpassungen an die meisten Datenbanksysteme angepasst werden.

Das obige ist der detaillierte Inhalt vonWie kann ich in SQL effizient eine Folge von Datumsangaben innerhalb eines bestimmten Bereichs generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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