[英]Oracle query period data to month
我有一個表,其中有一個以YYYYMM'||-||'YYYYMM
格式存儲的句號列(例如: 201111-201203
)。 我需要一個SQL查詢來導致行方式數據,每行以YYYYMM格式YYYYMM
每月YYYYMM
。
INPUT
201111-201203
OUTPUT
201111
201112
201201
201202
201203
分析這段代碼:
select
id, to_char(add_months(to_date(substr(interv,1,6),'yyyymm'), i),'yyyymm')
from
(Select level-1 as i from dual connect by level <= 50)
join
(
select 1 as id,'201111-201203' as interv from dual
union all
select 2, '201201-201301' from dual
)
on add_months(to_date(substr(interv,1,6),'yyyymm'), i) <=
to_date(substr(interv,-6),'yyyymm')
order by 1,2;
忘記連接和PL / SQL:
-- List of months between dates --
SELECT to_char( add_months( start_date, LEVEL-1 ), 'YYYYMM' ) list_of_months
FROM
(
SELECT to_date('201111', 'YYYYMM') start_date,
to_date('201203', 'YYYYMM') end_date
FROM dual
)
CONNECT BY LEVEL <= MONTHS_BETWEEN(Trunc(end_date,'MM'), Trunc(start_date,'MM'))+1
/
LIST_OF_MONTHS
--------------
201111
201112
201201
201202
201203
使用此代碼段開發代碼,您可以創建一個函數或過程來獲得所需的輸出
declare
v_from_date date;
v_to_date date;
v_time varchar2(20);
begin
v_time := '201111-201203';
v_from_date := to_date(substr(v_time, 0, 6), 'YYYYMM');
v_to_date := to_date(substr(v_time, 8, 6), 'YYYYMM');
while v_from_date <= v_to_date loop
dbms_output.put_line(v_from_date);
v_from_date := ADD_MONTHS(v_from_date, 1);
end loop;
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.