我有一张带有生日的桌子,格式为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')
此刻,我现在所处的位置,但我知道距离数英里。
答案 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;