Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menjana Tarikh Merentasi Berbilang Julat Tarikh dalam Oracle?

Bagaimanakah Saya Boleh Menjana Tarikh Merentasi Berbilang Julat Tarikh dalam Oracle?

Linda Hamilton
Linda Hamiltonasal
2025-01-02 15:06:42948semak imbas

How Can I Generate Dates Across Multiple Date Ranges in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn