Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menjana Tarikh Merentasi Berbilang Julat Tarikh dalam Oracle?
Mengendalikan Julat Tarikh Berbilang untuk Penjanaan Tarikh
Menjana tarikh antara dua tarikh lazimnya ditemui dalam pelbagai senario pengaturcaraan. Walaupun menjana tarikh untuk julat tunggal adalah mudah, melanjutkan fungsi ini untuk mengendalikan berbilang julat boleh menimbulkan cabaran.
Pertimbangkan jadual berikut di mana setiap baris mewakili julat tarikh:
ID | START_DATE | END_DATE |
---|---|---|
101 | April 1, 2013 | April 10, 2013 |
102 | May 10, 2013 | May 12, 2013 |
Julat yang dijangkakan output harus menjana tarikh individu dalam setiap julat:
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 menyediakan penyelesaian yang bijak untuk mencapai ini hasil:
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;
Lajur delta menggunakan hierarki CONNECT BY Oracle untuk menjana jujukan integer dari 1 hingga perbezaan maksimum antara tarikh tamat dan mula dalam jadual. Ungkapan A.START_DATE (delta - 1) menambah tarikh mula mengikut delta yang sesuai untuk setiap rekod dalam keputusan. Klausa WHERE menapis hasil yang melebihi tarikh tamat julat tarikh semasa.
Nikmati penyelesaian elegan ini untuk menjana tarikh merentas berbilang julat dalam Oracle!
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Tarikh Merentasi Berbilang Julat Tarikh dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!