SELECT to_date('200902','yyyymm')-to_date('200901','yyyymm') FROM dual;得到1月份天数 SELECT to_date('20090310','yyyymmdd')-to_date('20090120','yyyymmdd') FROM dual;得到相差天数
SELECT to_date('2009'||rpad('0',2,LEVEL+1),'yyyymm')-to_date('2009'||rpad('0',2,LEVEL),'yyyymm'),LEVEL FROM dual CONNECT BY LEVEL < to_char(SYSDATE,'mm')+1;(第一题)
1、要求循环提出 到当前月的每个月的天数 SQL> select to_char(add_months(trunc(sysdate, 'yyyy'), rownum-1),'yyyy-mm') mont h, add_months(trunc(sysdate, 'yyyy'), rownum)-add_months(trunc(sysdate, 'yyyy'), rownum-1) days from dual connect by rownum <=12;MONTH DAYS ------- ---------- 2009-01 31 2009-02 28 2009-03 31 2009-04 30 2009-05 31 2009-06 30 2009-07 31 2009-08 31 2009-09 30 2009-10 31 2009-11 30MONTH DAYS ------- ---------- 2009-12 31已选择12行。
SELECT to_date('20090310','yyyymmdd')-to_date('20090120','yyyymmdd') FROM dual;得到相差天数
SQL> select to_char(add_months(trunc(sysdate, 'yyyy'), rownum-1),'yyyy-mm') mont
h, add_months(trunc(sysdate, 'yyyy'), rownum)-add_months(trunc(sysdate, 'yyyy'),
rownum-1) days from dual connect by rownum <=12;MONTH DAYS
------- ----------
2009-01 31
2009-02 28
2009-03 31
2009-04 30
2009-05 31
2009-06 30
2009-07 31
2009-08 31
2009-09 30
2009-10 31
2009-11 30MONTH DAYS
------- ----------
2009-12 31已选择12行。
日期直接相减就是天数做第一题就是用的该方法
add_months(trunc(sysdate, 'yyyy'), rownum) - add_months(trunc(sysdate, 'yyyy'), rownum-1)这里就是下一个月的第一天减去上个月的第一天,也就是上月的总天数了。
1:select to_char(last_day(日期字段),'DD') from dual
2 select 日期1-日期2 from dual 其中日期1,日期2 是日期类型,若是字符类型,要用to_date()函数转换一下。