एसक्यूएल में ऐसा करना संभव है। दो तरकीबें हैं। पहला नंबरों की एक श्रृंखला उत्पन्न कर रहा है, जिसे आप connect
. का उपयोग करके सीटीई के साथ कर सकते हैं ।
दूसरा शुरुआत और अंत के लिए सही समय रखते हुए, तारीखों का विस्तार करने के लिए सही तर्क को एक साथ रख रहा है।
निम्नलिखित एक उदाहरण है:
with n as (
select level n
from dual connect by level <= 20
),
t as (
select 1 as id, to_date('01/01/2000 4', 'mm/dd/yyyy hh') as StartDate, to_date('01/03/2000 6', 'mm/dd/yyyy hh') as EndDate from dual union all
select 2 as id, to_date('01/04/2000 8', 'mm/dd/yyyy hh') as StartDate, to_date('01/04/2000 12', 'mm/dd/yyyy hh') as EndDate from dual union all
select 3 as id, to_date('01/05/2000', 'mm/dd/yyyy') as StartDate, to_date('01/06/2000', 'mm/dd/yyyy') as EndDate from dual
)
select t.id,
(case when n = 1 then StartDate
else trunc(StartDate + n - 1)
end) as StartDate,
(case when trunc(StartDate + n - 1) = trunc(enddate)
then enddate
else trunc(StartDate + n)
end)
from t join
n
on StartDate + n - 1 <= EndDate
order by id, StartDate
यहाँ यह SQLFiddle पर है।