????? 先说明下,最近在补下Oracle,去http://www.itpub.net/逛了下,做了点笔记,现在我把我做的笔记分享下,内容很基础,希望对大家有用,本文不算原创,目的只是分享知识。分享快乐,谢谢。
?
???? 下面的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;
??
???