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日之间过生日。 那时这段代码并不适合我的要求。
答案 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天的间隔都会带您到下一年,都会有效。