php mysql在7天内获得即将到来的生日dd MMM yy

php mysql在7天内获得即将到来的生日dd MMM yy,mysql,Mysql,在我的家庭数据表中,我有dob列,格式类似dd MMM yy。所以我需要从这些数据中得到即将到来的7天生日。 我运行了查询,但没有显示结果。。。有解决办法吗 SELECT name, dob FROM persons WHERE DATE(CONCAT(YEAR(CURDATE()), LEFT(dob, 8))) BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY)

在我的家庭数据表中,我有dob列,格式类似dd MMM yy。所以我需要从这些数据中得到即将到来的7天生日。 我运行了查询,但没有显示结果。。。有解决办法吗

SELECT name, dob FROM persons  WHERE 
        DATE(CONCAT(YEAR(CURDATE()), LEFT(dob, 8)))
                BETWEEN 
                DATE_SUB(CURDATE(), INTERVAL 1 DAY)
                AND
                DATE_ADD(CURDATE(), INTERVAL 5 DAY)
样本数据如下:

name        dob
prachi      09-Feb-15
badali devi 01-Jul-42
narayan ram 01-Jan-17
hasthi mal  01-Jan-18
bhiki devi  20-Jun-45
这应该起作用:

SELECT * FROM persons 
WHERE MONTH(STR_TO_DATE(dob, '%d-%b-%y'))=MONTH(CURDATE()) 
AND DAY(STR_TO_DATE(dob, '%d-%b-%y')) 
    BETWEEN DAY(curdate()) AND DAY(CURDATE()+INTERVAL 7 DAY) ;
在这里拉小提琴:

基本上,只需使用
STR_TO_date
dob
值转换为标准的MySQL日期格式,并使用与
BETWEEN
操作类似的方法

更多关于

编辑:

看来我没有正确处理重叠的月份。在这种情况下,我想另一种方法是人为地将此人的出生日期附加到当前年份,然后使用它来检查间隔天数。像这样:

SELECT * FROM persons WHERE 
REPLACE(STR_TO_DATE(dob, '%d-%b-%y'),YEAR(STR_TO_DATE(dob, '%d-%b-%y')),YEAR(CURDATE())) 
BETWEEN CURDATE() AND CURDATE()+INTERVAL 7 DAY;

欢迎来到SO。请参阅:。请不要再提供文本图片。使用日期数据类型存储日期,或者不要麻烦使用RDBMSi have dob列,格式为dd MMM yy它的数据类型是什么?一些字符串类型?使用STR_to_DATE()将其转换为DATETIME。但是最好的解决方案是改变数据类型。@Akina它是一个varchar数据类型。。如果可能,使用此数据类型给出提示或查询我已经指示了要使用的函数。您很了不起,如果它解决了您的问题,请接受此答案@kamleshratore。谢谢你什么意思它不工作?你能把它不起作用的部分包括进去吗?Thanksi用数据编辑了问题。。名字为“badali devi 01-Jul-42”的人不工作。您的MySQL版本是什么?