Mysql 选择仅使用日和月的未来7天

Mysql 选择仅使用日和月的未来7天,mysql,date-arithmetic,Mysql,Date Arithmetic,我有一个表,其中包含生日,格式为YYYY-MM-DD。我的目标是如果生日在接下来的7天内返回结果 我需要它只使用月份和日期,因为如果它也读取年份,那么1993年的生日永远不会在接下来的7天内。它还需要考虑到月份的变化 例如,如果是2月28日,表中的生日是3月1日,那么这将是7天内,但不是同一个月内 SELECT * FROM user WHERE DATE_FORMAT(birthday, '%m-%d') >= DATE_FORMAT(NOW() - INTERVAL 7 DAY, '%

我有一个表,其中包含生日,格式为YYYY-MM-DD。我的目标是如果生日在接下来的7天内返回结果

我需要它只使用月份和日期,因为如果它也读取年份,那么1993年的生日永远不会在接下来的7天内。它还需要考虑到月份的变化

例如,如果是2月28日,表中的生日是3月1日,那么这将是7天内,但不是同一个月内

SELECT * FROM user WHERE DATE_FORMAT(birthday, '%m-%d') >= DATE_FORMAT(NOW() - INTERVAL 7 DAY, '%m-%d')

这就是我目前所处的位置,但我知道我离这里很远。

您需要在where子句中设置两个日期的格式

SELECT * 
FROM user 
WHERE DATE_FORMAT(birthday, '%m-%d') BETWEEN DATE_FORMAT(NOW(), '%m-%d') AND DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 7 DAY), '%m-%d')

检索带有年份的当前年份(CURDATE(),使日期biy与生日后的月份和日期串联,并删除7天,检查CURDATE是否在以下范围内:

select *
from user 
where 
Curdate() between date_sub(CONCAT(YEAR(CURDATE()),'-',    date_format(birthday, '%m-%d')), interval 7 day) 
and CONCAT(YEAR(CURDATE()),'-', date_format(birthday, '%m-%d')) ;

从今天的日期开始取年份部分,并将其与dob列值的月和日部分连接。然后将该字符串转换为日期。然后将其用作子查询,并检查新列的日差是否介于0和7之间

查询

SELECT t.* -- select except the `new_col` 
FROM  (SELECT *, 
          CAST((Concat(YEAR(NOW()), '-', DATE_FORMAT(dob, '%m-%d'))) AS DATE 
          ) AS 
                `new_col` 
   FROM `user`)t 
WHERE DATEDIFF(t.`new_col`, NOW()) BETWEEN 0 AND 7; 

为什么不使用date\u add,然后使用between来获取您的值呢?
从date1和date2之间的日期表中选择*?非常感谢!这也适用于月结转吗?您正在比较字符串,它适用于月结转,但不适用于年底(例如,如果现在返回12月27日)