仅使用日期和月份选择接下来的7天

时间:2017-02-23 09:20:42

标签: 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, '%m-%d')

此刻,我现在所处的位置,但我知道距离数英里。

3 个答案:

答案 0 :(得分:1)

您需要在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')

答案 1 :(得分:0)

使用YEAR(CURDATE()检索当前年份,将日期与生日中的月和日相连,并删除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')) ;

答案 2 :(得分:0)

从今天开始计算年份,并将其与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;