大家好,我想问一个关于如何查询最近生日的用户的语句,谢谢!
user表中birthday字段是date,数据库是mysql
我想实现:从表中查询出当前时间5天内生日的用户~并且按照时间顺序排列~即生日距离现在越近的排越前~
百度了一下,看了些关于日期时间函数的方法~自己拼了一句出来
select * from user where (MONTH(birthday) between 1 and 2) and (DAYOFMONTH(birthday) between 1 and 10) order by DAYOFYEAR(birthday);
我知道上面的语句是不行的,想问问大家是如何实现的呢~帮帮忙,谢谢~

解决方案 »

  1.   

    select * from user where DAYOFYEAR(birthday) - DAYOFYEAR(CURDATE()) <= 5;
    这句更接近,但是结果还是不行~
      

  2.   

    select * from user where DATEDIFF(currentDate(),birthday)<=5 order by  DATEDIFF(currentDate(),birthday);
      

  3.   

    我重新整理了一个
    生日查询,查询几天内过生日的人员的SQL语句
      

  4.   

    老紫竹的都不行~select * from user where (DAYOFYEAR(birthday) - DAYOFYEAR(CURDATE()) between 0 and 7) OR (DAYOFYEAR(birthday) - DAYOFYEAR(CURDATE()) between -366 and -359) order by DAYOFYEAR(birthday);这是我自己想的,但是还是没有解决闰年问题~
      

  5.   


    select * 
    from user 
    where abs(DAYOFYEAR(birthday) - DAYOFYEAR(CURDATE())) <= 5
    order by abs(DAYOFYEAR(birthday) - DAYOFYEAR(CURDATE()));如果要考虑2月是28天还是29天的问题,则需要在where条件里加case when 判断
      

  6.   

    想到另外一个思路:
      把用户的生日birthday的年份替换成今年的年份,月和日部分不变,然后这个新日期与当前日期相减,绝对值小于等于5有空再搞点测试数据试试
      

  7.   


    你好,真是非常巧,你的想法和我一样,而且我也按照这个想法做出来了~太巧了~!!!!
    select * from user where to_days(concat(year(curDate()), date_format(birthday, '%m%d'))) - to_days(curDate()) between 0 and 25;