Это должно работать:
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) ;
Скрипка здесь: https://www.db-fiddle.com/f/rBaEMGygitjidzUBNMLJfz/5
В основном просто превратите значение dob
в стандартный формат MySQL даты используя STR_TO_DATE
и несколько аналогично вашей операции BETWEEN
.
Подробнее о STR_TO_DATE
EDIT:
Похоже, что я не справился с перекрытием месяцев должным образом. В этом случае я думаю о другом способе - искусственно добавить дату рождения человека к текущему году, а затем использовать его для проверки интервала дней. Как это:
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;