select * from emp where to_date(sysdate,'yyyy-mm-dd')<to_date(dateField,'yyyy-mm-dd')
and to_date(dateField,'yyyy-mm-dd')<to_date(dateField,'yyyy-mm-dd')+10
好久没有写sql了。上面的差不多吧

解决方案 »

  1.   

    未来10天内过生日的人
     select * 
       from emp 
      where to_char(birthday,'mmdd') 
    between to_char(sysdate,'mmdd')
        and to_char(sysdate+10,'mmdd');
      

  2.   

    这样写也有问题!!如果sysdate='1228',sysdate+10后为‘0107’   那么birthday='1229'的人员信息就查不出来。。
      

  3.   

    select * 
       from emp 
      where to_date('2004'||to_char(birthday,'mmdd'),'yyyymmdd') 
    between to_date('2004'||to_char(sysdate,'mmdd'),'yyyymmdd')
        and to_date('2004'||to_char(sysdate+10,'mmdd'),'yyyymmdd');
    这样应该可以,但是好累赘,不过我也还没想到更好的办法。如果对to_date('2004'||to_char(birthday,'mmdd'),'yyyymmdd') 建个FBI可能效率更高。
    对了,使用2004是为了防止闰年
      

  4.   

    select * from emp
      where trunc(birthday)>=trunc(sysdate)
        and trunc(birthday)<=trunc(sysdate)+10
      

  5.   

    select * from emp
      where trunc(to_date(to_char(sysdate,'YYYY')||to_char(birthday,'MMDD'),'YYYYMMDD'))>=trunc(sysdate)
        and trunc(to_date(to_char(sysdate,'YYYY')||to_char(birthday,'MMDD'),'YYYYMMDD'))<=trunc(sysdate)+10
      

  6.   

    佩服高手!但有些不太理解:sysdate和birthday为啥先转换成to_char后转换成to_date,‘YYYYMMDD'又有何用?这里sysdate,'YYYY'为何不是  ; sysdate,'YYYYMMDD'?
      

  7.   

    "sysdate" 默认是精确到 年月日吗?还有十分秒吗?
      

  8.   

    sysdate就是现在的时刻,精确到时分表,还有毫秒的说:)
      

  9.   

    问题好像没解决???
    如05.1.1生日,今天是04.12.31的话用sysdate出来2004.1.1还是出不来。想了会好像不太会,楼主不如用个procedure来搞定好了,不用动脑,呵呵。。
      

  10.   

    这样写试试??应该可以解决跨年的问题。
    select * from emp
     where to_date(to_char(sysdate,'YYYY')||to_char(birthday,'MMDD'),'YYYYMMDD')
           between trunc(sysdate) and trunc(sysdate)+10
        or to_date(to_char(to_number(to_char(sysdate,'YYYY'))+1)||to_char(birthday,'MMDD'),'YYYYMMDD')
           between trunc(sysdate) and trunc(sysdate)+10还不行或太烦就建个表出来,共一列number型10行。如temp_tbl(num(0,1,2,3,4,5,6,7,8,9))
    select * from emp
    where to_char(birthday,'mmdd') in 
          (select to_char(sysdate + num,'mmdd')) from temp_tbl)不想or不能建表的话,随便找个大于10行的表
    select * from emp
    where to_char(birthday,'mmdd') in 
          (select to_char(sysdate + rownum,'mmdd')) from emp where rownum < 10)
      

  11.   

    select * 
       from emp 
      where to_char(birthday,'yyyymmdd') 
    between to_char(sysdate,'yyyymmdd')
        and to_char(sysdate+10,'yyyymmdd')
    这个总没问题吧
      

  12.   

    birthday 为日期型的情况如下。如果不是日期型,先转换。
    SELECT * 
       FROM emp 
      WHERE  birthday > SYSDATE 
             AND birthday < SYSDATE + 10
      

  13.   

    如果要考虑时分秒的问题。可以如下操作。
       SELECT * 
       FROM emp 
      WHERE  birthday > TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD')
             AND birthday < TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD') + 10
      

  14.   

    这么做应该可以的:
    select * from emp 
    where add_months(birthday,ceil(months_between(sysdate,birthday)/12)*12) 
    between sysdate and sysdate + 10 
    把生日加上距系统日期的年数(不足1年算1年),然后再和系统日期比
    比如生日是2004/1/5,当前时期是2004/12/31,把生日加12个月到2005/1/5,再和12/31号比就应该没问题了