想做一个会员生日提醒功能,要查出最近10天过生日的会员。表:    base_user(会员)
字段:  uid(会员id) / birthday(生日)
数据库:sqlserver2000

解决方案 »

  1.   

    select * from base_user where datediff(day,birthday,getdate()) between 0 and 10 end
      

  2.   

    select uid from base_user
    where datediff(dd,getdate(),birthday)<10
      

  3.   

    select uid from base_user
    where datediff(dd,getdate(),birthday) between 0 and 10 end
      

  4.   

    --晕,多了个end
    select uid from base_user
    where datediff(dd,getdate(),birthday) between 0 and 10
      

  5.   

    SELECT *    FROM    base_user    WHERE DATEDIFF(DD,GETDATE(),birthday) BETWEEN  0 AND 10
      

  6.   

    select * from base_user where datediff(day,birthday,dateadd(year,datediff(year,getdate(),birthday),getdate())) between 0 and 10
      

  7.   

    select * 
    from base_user 
    where birthday between getdate() and dateadd(day,10,getdate()) end
      

  8.   

    select * 
    from base_user 
    where datediff(day,@current_date,dateadd(year,datediff(year,birthday,@current_date)+case when dateadd(year,datediff(year,birthday,@current_date),birthday) < @current_date then 1 else 0 end,birthday))<10
      

  9.   

    --更正
    select * 
    from base_user 
    where datediff(day,getdate(),dateadd(year,datediff(year,birthday,getdate())+case when dateadd(year,datediff(year,birthday,getdate()),birthday) < getdate() then 1 else 0 end,birthday))<10
      

  10.   

    而且2月29的不能直接这样datediff就ok吧
      

  11.   

    --指今天之前的十天
    select * from base_user where datediff(day,cast(left(convert(varchar(10),getdate(),120),4) + right(convert(varchar(10),birthday,120),6) as datetime),getdate())<=10
    --指今天之后的十天
    select * from base_user where datediff(day,getdate(),cast(left(convert(varchar(10),getdate(),120),4) + right(convert(varchar(10),birthday,120),6) as datetime))<=10
    --指今天之前之后的各十天
    select * from base_user where abs(datediff(day,getdate(),cast(left(convert(varchar(10),getdate(),120),4) + right(convert(varchar(10),birthday,120),6) as datetime)))<=10
      

  12.   

    而且2月29的不能直接这样datediff就ok吧
    --------------------
    select * from base_user
    where datediff(d,getdate(),dateadd(yy,datediff(yy,dt,getdate()),dt)) between 0 and 10 and datepart(d,dt)=datepart(d,dateadd(yy,datediff(yy,dt,getdate()),dt))
      

  13.   

    而且2月29的不能直接这样datediff就ok吧-------------------绝对OK
      

  14.   

    --这样就OK啦select * from base_user where datediff(day,getdate(),dateadd(year,datediff(year,birthday,getdate()),birthday)) between 0 and 10
      

  15.   

    来看看昨夜小楼的方法:select * from base_user where datediff(day,birthday,dateadd(year,datediff(year,getdate(),birthday),getdate())) between 0 and 10格式是:datediff(dateadd(datediff()))
    思路是:把生日的年份转为当前日期的年份,然后比较两个日期。假设今天是2007-12-31,会员生日是1974-1-5,还有5天会员过生日,这个查询方法好像实现不了,我说的对吗?
      

  16.   

    老乌龟的方法还没细看,看到他用了convert方法,貌似有戏。
      

  17.   

    My answer:
    select uid
    from base_user
    where datediff(d,cast(left(Convert(varchar(8),getdate(),112),4)+right(Convert(varchar(8),birthday,112),4) as datetime),getdate())
    between 0 and 10
    Test Case:
    select  1
    where 
    datediff(d,cast(left(Convert(varchar(8),getdate(),112),4)+right(Convert(varchar(8),'1997-5-5',112),4) as datetime),getdate())
    between 0 and 10
      

  18.   

    这样好像不行,12月29号,与1月1号好像没法比。
    My answer:
    select uid
    from base_user
    where datediff(d,cast(left(Convert(varchar(8),getdate(),112),4)+right(Convert(varchar(8),birthday,112),4) as datetime),getdate())
    between 0 and 10
      

  19.   

    我今天的会一个接一个,没时间细看。我会在周末把你们的方法仔细研究一遍,当然包括mengmou ,就冲你那句话我更仔细看你的答案,希望能让我有快感。
      

  20.   

    /*
    看看这个吧,我先计算了每个人的下一个"生日":NextBD,然后与当前日期比较,最后比较NextBD与birthday的datepart(day,birthday)排除2月29日不存在的情况,经过测试,可行,呵呵~!~!
    */
    select * from
    (select *,NextBD=case when dateadd(yy,datediff(yy,birthday,getdate()),birthday)>getdate() then dateadd(yy,datediff(yy,birthday,getdate()),birthday) else dateadd(yy,datediff(yy,birthday,getdate())+1,birthday) end from base_user) as tb
    where datediff(d,getdate(),NextBD) between 0 and 10 and datepart(d,birthday)=datepart(d,NextBD)