先说明下,最近在补下Oracle,去外链网址已屏蔽逛了下,做了点笔记,现在我把我做的笔记分享下,内容很基础,希望对大家有用,本文不算原创,目的只是分享知识。分享快乐,谢谢。

下面的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个yyyy-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个yyyy-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;

笔记记录结束,希望对大家有用,谢谢。

全文完。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐