如题

解决方案 »

  1.   

    SELECT   TO_DATE ('20080501', 'yyyymmdd')
           + 15
           - TO_NUMBER (TO_CHAR (TO_DATE ('20080501', 'yyyymmdd'), 'd'))
      FROM DUAL
      

  2.   


    SELECT   TO_DATE ('20080501', 'yyyymmdd')
           + DECODE (TO_CHAR (TO_DATE ('20080501', 'yyyymmdd'), 'd'), 1, 8, 15)
           - TO_NUMBER (TO_CHAR (TO_DATE ('20080501', 'yyyymmdd'), 'd'))
      FROM DUAL
    你只要把20080501换成任何一年的5.1就可以算出该年的母亲节
      

  3.   

    好象使用round函数更加的方便……
      

  4.   

    select round(to_date('2008-05-01','yyyy-mm-dd'),'day')+7 from dual;
    还应该完善的 
    我先改哈,再不楼上帮忙
      

  5.   

    select round(to_date('2008-05-01','yyyy-mm-dd'),'day')+7 from dual;
    刚才发的没有出来,重发哈.
    上面的代码有问题的,等会改下再发^_^
      

  6.   


    呵呵你这个用法我倒是第一次看到,学习学习,我要去研究下round的用法了
      

  7.   

    你这个算法有问题
    select round(to_date('2007-05-01','yyyy-mm-dd'),'day')+7 from dual
    出来是5.6用我的算法是5.13
      

  8.   

    --下面是清屏语句 
    clear screen; 
    /*alter session set nls_date_language='American'; 
    commit; 
    -------------------------关于日期的四舍五入函数round的使用------------------ 
    --函数原型round(date,fmt),date为要处理的日期,fmt指要处理的日期部分--1.
    --当fmt为YEAR的时候表示对年四舍五入,月日归为元旦那天 ,以6月30日为界 
    select round(sysdate,'year') from dual; 
    --date=2008-6-30 结果=2008-01-01 
    select round(to_date('30-JUN-2008'),'year') from dual; 
    --date=2008-7-1 结果=2009-01-01 
    select round(to_date('03-JUL-2008'),'year') from dual;--2.当fmt为MONTH的时候表示对月四舍五入,年不变,日归到运算后的月的第一天,以每月的中间(15号)为界 
    --  结果要么为本月1号,要么为下月1号。 
    select round(sysdate,'month') from dual; 
    --date中的日期为1号到15号,结果为本月1号 
    select round(to_date('01-SEP-2008'),'month') from dual; 
    select round(to_date('15-SEP-2008'),'month') from dual; 
    --date中的日期为16号到30号,结果为下个月1号 
    select round(to_date('16-SEP-2008'),'month') from dual; 
    select round(to_date('30-SEP-2008'),'month') from dual;--3.当fmt为DD的时候表示对日四舍五入,年月都不变,以每天的中午12点为界 
    --date中的时间晚于中午12点的时候结果为当天的年月日,data中的时间大于中午12点的时候结果为第二天的年月日 
    select round(to_date('04-SEP-2008')+11/24,'dd') from dual;--小于12点 
    select round(to_date('04-SEP-2008')+12/24,'dd') from dual;  --to_date('04-SEP-2008')+12/24的结果为2008-09-04-12:00:00 
    select round(to_date('04-SEP-2008')+13/24,'dd') from dual;--大于12点*/--3.当fmt为DAY的时候表示对星期进行四舍五入,年不变,以星期三的中午12点为界, 
    --  结果要么为前一个星期日时候的日期,要么为当前星期的星期日的日期 
    --下面以2008年9月3号(星期三)为例进行说明,上个星期日为2008-08-31,下个星期日为2008-09-07 
    --观察下面的运行结果 
    select round(to_date('03-SEP-2008'),'day') from dual;--2008-09-03-00:00:00 
    select round(to_date('03-SEP-2008')+11/24,'day') from dual;--小于12点 
    select round(to_date('03-SEP-2008')+12/24,'day') from dual;--等于2008-09-03-12:00:00点 
    select round(to_date('03-SEP-2008')+13/24,'day') from dual;--大于12点-------------------------关于日期的截取函数trunc的使用------------------
    select trunc(sysdate) from dual;
    select trunc(sysdate,'year') from dual;
    select trunc(sysdate,'month') from dual;
    select trunc(sysdate,'dd') from dual;
    select trunc(sysdate,'day') from dual;
      

  9.   

    哈哈,四舍五入不行搞截取的
    select trunc(to_date('2008-05-01','yyyy-mm-dd'),'day')+14 from dual;
      

  10.   

    汗自己一个,一直的想用round来实现,却忘记了trunc函数,搞什么计算到底应该加上7天还是14天,把自己郁闷了半天…………
    上个厕所上来突然想起来还有个trunc函数,建议大家想不通问题的时候去上课WC,保不准上来就想到解决办法了
      

  11.   

    SELECT DECODE (TO_CHAR (TO_DATE ('2008-05-01', 'yyyy-mm-dd'), 'day'),
                   '1', TRUNC (TO_DATE ('2008-05-01', 'yyyy-mm-dd'), 'day') + 7,
                   TRUNC (TO_DATE ('2008-05-01', 'yyyy-mm-dd'), 'day') + 14
                  )
      FROM DUAL; 把你的改一下,这样就对了
      

  12.   

    TO_CHAR (TO_DATE ('2008-05-01', 'yyyy-mm-dd'), 'day') 返回是类似 Tuesday 、Saturday 
    怎么和 ‘1’ 进行比较呢?????
    为什么要和 ‘1’  进行比较