php mysql получить ближайшие дни рождения через 7 дней дд-МММ-гг - PullRequest
0 голосов
/ 18 июня 2020

в таблице данных моей семьи у меня есть столбец 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

1 Ответ

1 голос
/ 18 июня 2020

Это должно работать:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...