求距今多少年的SQL语句 比如今天是2004/2/29
2004/2/29及以后日期为0
2003/3/1--2004/2/28之间的日期为1
2002/3/1--2003/2/28之间的日期为2
2001/3/1--2002/2/28之间的日期为3
2000/2/29--2001/2/28之间的日期为4
1999/3/1--2000/2/28之间的日期为5又如今天是2007/4/10
2007/4/10及以后日期为0
2006/4/10--2007/4/9之间的日期为1
2005/4/10--2006/4/9之间的日期为2
2004/4/10--2005/4/9之间的日期为3
2003/4/10--2004/4/9之间的日期为4
2002/4/10--2003/4/9之间的日期为5求select语句

解决方案 »

  1.   

    select mod(to_date(to_char(sysdate, 'yyyy-mm-dd'), 'yyyy-mm-dd')-to_date('2004/4/9', 'yyyy-mm-dd'), 365) xx from dual
      

  2.   

    zhy19806(Free) 
    好像不对,sysdate是2004-02-29时,要减的日期是2000/2/29
    结果为1,应该是4
      

  3.   

    select (to_date(to_char(sysdate, 'yyyy-mm-dd'), 'yyyy-mm-dd')-to_date('2004/4/9', 'yyyy-mm-dd'))/365 from dual
      

  4.   

    我本来也是这样写的。但闰年比如sysdate是2004-02-29时,
    2000/2/29为4.0027397260274
    2001/2/28为3.0027397260274
    而应该要4我是用
    select (to_date(to_char(  
    to_date('2004-02-29 00:59:34','YYYY/MM/DD hh24:mi:ss') 
    , 'yyyy-mm-dd'), 'yyyy-mm-dd')-to_date('2001/2/28', 'yyyy-mm-dd'))/365 from dual
    来测的
      

  5.   

    select trunc((to_date('2004-02-29', 'yyyy-mm-dd') -
           to_date('2001-02-28', 'yyyy-mm-dd'))/365) aa
      from dual
      

  6.   

    select trunc((to_date('2004-02-29', 'yyyy-mm-dd') -
           to_date('2001-02-28', 'yyyy-mm-dd'))/365) aa
      from dual
      

  7.   

    谢谢njuzgj(罐子) 
    但结果还是3啊 ,正解是4自己搞定,用笨方法 
    select case 枚举了1~5
    谢谢各位
      

  8.   

    select trunc((to_date('2004-02-29', 'yyyy-mm-dd') -
           to_date('2001-02-28', 'yyyy-mm-dd'))/365) aa
      from dual
    这个是3没得问题啊
    select trunc((to_date('2004-04-10', 'yyyy-mm-dd') -
           to_date('2001-04-09', 'yyyy-mm-dd'))/365) aa
      from dual
    这样也是3啊,但是你要的是不是4嘛?