花を借りて仏に捧げるOracleは連続的な日付を得ます.
4860 ワード
まず説明します.最近はOracleを補い、http://www.itpub.net/を回ってメモを取りました.今は私が作ったメモを共有します.内容は基本的です.皆さんのために役に立つことを望んでいます.本文はオリジナルではなく、知識を共有することを目的としています.楽しみを分かち合います.ありがとうございます.
次のSQLはOracle 10.2.0.1の上でテストに合格します.
(一)2つの日付がすでに知られていますが、この2つの日付の各日(開始日を含む)を表示したいです.
(二)開始日と数字nを指定し、n個のyyy-mmを表示します.
(三)開始日と数字nを指定して、n個のyyy-mm-ddを表示します.
(四)所与の年には、一年の日付が表示されます.
(金)表示する曜日を表示します.
(六)表示時は土日は表示されません.
(七)表示時は土日のみ表示されます.
(八)考えを変えました.自分で開始日を決めたいですか?それとも曜日を表示しますか?
メモが終わりました.皆さんに役に立ちたいです.ありがとうございます.
全文が終わる
次のSQLはOracle 10.2.0.1の上でテストに合格します.
(一)2つの日付がすでに知られていますが、この2つの日付の各日(開始日を含む)を表示したいです.
SELECT TO_DATE('20130801', 'yyyymmdd') + LEVEL - 1
FROM DUAL
CONNECT BY LEVEL <= FLOOR(TO_DATE('20130811', 'yyyymmdd') -
TO_DATE('20130801', 'yyyymmdd')) + 1;
パラメータを自分で入力したいなら、このようにしてもいいです.SELECT TO_DATE('&1', 'yyyymmdd') + LEVEL - 1
FROM DUAL
CONNECT BY LEVEL <= FLOOR(TO_DATE('&2', 'yyyymmdd') -
TO_DATE('&1', 'yyyymmdd')) + 1;
下のものは自分で換えられます.変えません.(二)開始日と数字nを指定し、n個のyyy-mmを表示します.
select to_char(add_months(date '2013-1-1', level - 1), 'yyyy-mm') months
from dual
connect by level <= 12;
これもいいですselect &year || '-' || lpad(rownum, 2, '0') yyyymm
from dual
connect by rownum <= 12
(三)開始日と数字nを指定して、n個のyyy-mm-ddを表示します.
select to_char(add_months(date '2013-1-29', level - 1), 'yyyy-mm-dd') months
from dual
connect by level <= 12;
(四)所与の年には、一年の日付が表示されます.
SELECT trunc(to_date('&1', 'yyyy'), 'year') + LEVEL - 1
FROM dual
CONNECT BY level <=
add_months(last_day(trunc(to_date('&1', 'yyyy'), 'year')), 11) -
trunc(to_date('&1', 'yyyy'), 'year') + 1;
(金)表示する曜日を表示します.
select to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'yyyy-mm-dd') dt,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'day') day,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'iw') weeks
from dual
CONNECT BY level <=
add_months(last_day(trunc(to_date('2014-01-01', 'yyyy-mm-dd'), 'year')), 11) -
trunc(to_date('2014-01-01', 'yyyy-mm-dd'), 'year') + 1;
(六)表示時は土日は表示されません.
select to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'yyyy-mm-dd') dt,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'day') day,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'iw') weeks
from dual
where to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1,'d') not in (7, 1)
CONNECT BY level <=
add_months(last_day(trunc(to_date('2014-01-01', 'yyyy-mm-dd'), 'year')), 11) -
trunc(to_date('2014-01-01', 'yyyy-mm-dd'), 'year') + 1;
(七)表示時は土日のみ表示されます.
select to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'yyyy-mm-dd') dt,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'day') day,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'iw') weeks
from dual
where to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1,'d') in (7, 1)
CONNECT BY level <=
add_months(last_day(trunc(to_date('2014-01-01', 'yyyy-mm-dd'), 'year')), 11) -
trunc(to_date('2014-01-01', 'yyyy-mm-dd'), 'year') + 1;
(八)考えを変えました.自分で開始日を決めたいですか?それとも曜日を表示しますか?
select to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'yyyy-mm-dd') dt,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'day') day,
to_char(to_date('2014-01-01', 'yyyy-mm-dd') + level - 1, 'iw') weeks
from dual
CONNECT BY level <=
FLOOR(to_date('2014-03-01', 'yyyy-mm-dd') -to_date('2014-01-01', 'yyyy-mm-dd')) + 1;
メモが終わりました.皆さんに役に立ちたいです.ありがとうございます.
全文が終わる