So verwenden Sie SQL, um einen Datumsbereich zu generieren
Bei der Arbeit mit SQL ist es häufig erforderlich, Abfragen über mehrere Datumsangaben hinweg auszuführen. Dies kann eine Herausforderung sein, wenn Sie nicht über eine vordefinierte Liste von Daten verfügen, mit denen Sie arbeiten können. Glücklicherweise gibt es mehrere Techniken, mit denen Sie einen Datumsbereich in SQL generieren können.
Ein gängiger Ansatz ist die Verwendung der CONNECT BY-Klausel. Mit dieser Klausel können Sie eine hierarchische Abfrage erstellen, die eine Reihe von Zeilen basierend auf einer angegebenen Beziehung generiert. Die folgende Abfrage generiert beispielsweise eine Liste der letzten 365 Tage:
SELECT TRUNC(SYSDATE - ROWNUM) dt FROM DUAL CONNECT BY ROWNUM < 366
Diese Abfrage beginnt mit dem aktuellen Datum (SYSDATE) und subtrahiert dann einen Tag für jede Zeile in der Hierarchie. Die ROWNUM-Pseudospalte verfolgt die aktuelle Zeilennummer und die CONNECT BY-Klausel stellt sicher, dass die Abfrage nach der Generierung von 365 Zeilen stoppt.
Eine weitere Option zum Generieren eines Datumsbereichs ist die Verwendung des CROSS JOIN-Operators . Mit diesem Operator können Sie zwei Tabellen zu einem einzigen Ergebnissatz kombinieren, auch wenn sie keine passenden Spalten haben. Die folgende Abfrage generiert beispielsweise eine Liste aller möglichen Kombinationen von Tagen und Stunden:
SELECT day, hour FROM ( SELECT LEVEL - 1 day FROM DUAL CONNECT BY LEVEL <= 365 ) CROSS JOIN ( SELECT LEVEL - 1 hour FROM DUAL CONNECT BY LEVEL <= 24 )
Diese Abfrage beginnt mit der Erstellung einer Tagestabelle (erste Unterabfrage) und einer Stundentabelle (zweite). Unterabfrage). Der CROSS JOIN-Operator kombiniert diese beiden Tabellen dann zu einem einzigen Ergebnissatz und generiert alle möglichen Kombinationen von Tagen und Stunden.
Schließlich können Sie auch eine gespeicherte Prozedur verwenden, um einen Datumsbereich zu generieren. Eine gespeicherte Prozedur ist eine Reihe von SQL-Anweisungen, die in der Datenbank gespeichert werden und mehrmals ausgeführt werden können. Die folgende gespeicherte Prozedur generiert eine Liste der letzten 365 Tage:
CREATE PROCEDURE generate_dates AS BEGIN FOR i IN 1 .. 365 LOOP INSERT INTO dates (dt) VALUES (TRUNC(SYSDATE - i)); END LOOP; END;
Diese gespeicherte Prozedur kann durch Aufruf der folgenden Anweisung ausgeführt werden:
EXECUTE generate_dates;
Sobald die gespeicherte Prozedur ausgeführt wurde ausgeführt, können Sie dann die Datumstabelle verwenden, um Ihre Abfragen auszuführen.
Dies sind nur einige der Techniken, die Sie verwenden können, um einen Datumsbereich in SQL zu generieren. Der beste Ansatz für Sie hängt von den spezifischen Anforderungen Ihrer Anwendung ab.
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Datumsbereich in SQL mithilfe von CONNECT BY, CROSS JOIN oder gespeicherten Prozeduren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!