Umgang mit mehreren Datumsbereichen für die Datumsgenerierung
Das Generieren von Datumsangaben zwischen zwei Datumsangaben kommt in verschiedenen Programmierszenarien häufig vor. Während das Generieren von Daten für einen einzelnen Bereich unkompliziert ist, kann die Erweiterung dieser Funktionalität auf mehrere Bereiche eine Herausforderung darstellen.
Beachten Sie die folgende Tabelle, in der jede Zeile einen Datumsbereich darstellt:
ID | START_DATE | END_DATE |
---|---|---|
101 | April 1, 2013 | April 10, 2013 |
102 | May 10, 2013 | May 12, 2013 |
Der erwartete Die Ausgabe sollte einzelne Daten innerhalb jedes Bereichs generieren:
ID | Dates |
---|---|
101 | April 1, 2013 |
101 | April 2, 2013 |
... | ... |
101 | April 10, 2013 |
102 | May 10, 2013 |
102 | May 11, 2013 |
102 | May 12, 2013 |
Oracle bietet eine geniale Lösung, um dies zu erreichen Ergebnis:
select A.ID, A.START_DATE + (delta - 1) dt from t_dates A, ( select level-1 as delta from dual connect by level-1 <= ( select max(end_date - start_date) from t_dates ) ) where A.START_DATE + (delta - 1) <= A.end_date order by 1, 2;
Die Delta-Spalte nutzt die CONNECT BY-Hierarchie von Oracle, um eine Folge von Ganzzahlen von 1 bis zur maximalen Differenz zwischen End- und Startdatum in der Tabelle zu generieren. Der Ausdruck A.START_DATE (Delta – 1) erhöht das Startdatum um das entsprechende Delta für jeden Datensatz in den Ergebnissen. Die WHERE-Klausel filtert Ergebnisse heraus, die das Enddatum des aktuellen Datumsbereichs überschreiten.
Genießen Sie diese elegante Lösung zum Generieren von Datumsangaben über mehrere Bereiche hinweg in Oracle!
Das obige ist der detaillierte Inhalt vonWie kann ich in Oracle Daten über mehrere Datumsbereiche hinweg generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!