我怎样才能在12月结束时找到即将到来的生日?

时间:2014-10-13 17:36:51

标签: mysql sql date

select *
from date
where DATE_FORMAT(sdate,'%m-%d') between
   DATE_FORMAT(CURDATE(), '%m-%d') and
   DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 7 DAY),'%m-%d')

此代码运行完美,但当前日期是12月29日,间隔天数为7,因此不会显示任何输出。但我也要在12月29日到1月4日之间过生日。 那时这段代码并不适合我的要求。

4 个答案:

答案 0 :(得分:0)

尝试添加这样的年份:

SELECT *
FROM dates
WHERE DATE_FORMAT(sDATE,'%Y-%m-%d') BETWEEN
   DATE_FORMAT(CURDATE(), '%Y-%m-%d') AND
   DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 7 DAY),'%Y-%m-%d')

如果sdate是用户订阅日期,并且您希望将他的生日祝贺,请在sdate添加1年:

SELECT *
FROM dates
WHERE DATE_FORMAT(ADDDATE(sdate,INTERVAL 1 YEAR),'%Y-%m-%d') BETWEEN
   DATE_FORMAT(CURDATE(), '%Y-%m-%d') AND
   DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 7 DAY),'%Y-%m-%d');

如果您想获得所有纪念日日期,您可以这样做。 (对不起肮脏,我只是想知道它是否是你期望的那个):

SELECT * FROM dates WHERE DATE_FORMAT(sdate,'%m-%d') IN (
DATE_FORMAT(CURDATE(),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 1 DAY),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 2 DAY),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 3 DAY),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 4 DAY),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 5 DAY),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 6 DAY),'%m-%d'), 
DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL 7 DAY),'%m-%d'))

以下是一些用您想要的时间间隔生成查询的PHP代码:

    $interval = 10;
    $query = "SELECT * FROM dates WHERE DATE_FORMAT(sdate,'%m-%d') IN (DATE_FORMAT(CURDATE(),'%m-%d')";
    for($i = 1; $i <= $interval; $i++) {
        $query .= ", DATE_FORMAT(ADDDATE(CURDATE(),INTERVAL $i DAY),'%m-%d')";
    }
    $query .= ");";

答案 1 :(得分:0)

我认为搜索生日最简单的方法是从日期中减去一年中的某一天。这消除了年底的问题:

select *
from date
where DATE_FORMAT(sdate - interval dayofyear(sdate) day, '%m-%d')
          between DATE_FORMAT(CURDATE() - interval dayofyear(sdate) day, '%m-%d') and
                  DATE_FORMAT(CURDATE() - interval dayofyear(sdate) day + INTERVAL 7 DAY, '%m-%d');

答案 2 :(得分:0)

或者将他们7天的年龄与今天的年龄进行比较:

SELECT *
FROM   dates
WHERE  TIMESTAMPDIFF(YEAR, sdate, CURRENT_DATE + INTERVAL 7 DAY)
     > TIMESTAMPDIFF(YEAR, sdate, CURRENT_DATE)

答案 3 :(得分:0)

(CONCAT(CASE WHEN (DATE_FORMAT(birthday, '%c-%d') >= DATE_FORMAT(CURDATE(), '%c-%d')) THEN YEAR(CURDATE()) ELSE YEAR(CURDATE())+1 END,DATE_FORMAT(birthday, '-%c-%d'))  between CURDATE() and DATE_ADD(CURDATE(), INTERVAL 90 DAY))

上述查询代码段无论是闰年还是90天的间隔都会带您到下一年,都会有效。