Получите день рождения от клиентов до недели MYSQL - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь получить записи из базы данных, где день рождения клиента находится между настоящим моментом и неделей.Я перепробовал много вариантов и ищу более часа, но не могу найти рабочее решение.Я использую MYSQL 5.7.19.Это мой запрос

SELECT firstname, lastname, IF(housenumber_addition = "", CONCAT(housenumber,housenumber_addition ), housenumber_addition ) AS adres, sex
FROM customer
WHERE DATE(birthdate) BETWEEN NOW() AND NOW() + INTERVAL 7 DAY

Изображение данных: data Изображение структуры: Structure

Находится в Голландии:( Мне также нужно получить новый возраст от клиента, если его день рождения длится до недели

Надеюсь, кто-нибудь может дать мне хороший и рабочий ответ

Заранее спасибо

1 Ответ

0 голосов
/ 20 сентября 2018

Ваша проблема в том, что дата рождения не в текущем году, поэтому ваш тест не может быть верным.Вам необходимо преобразовать дату рождения в значение в текущем году, что вы можете сделать следующим образом:

STR_TO_DATE(CONCAT(YEAR(NOW()), '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d')

Таким образом, ваш запрос становится:

SELECT firstname, lastname, IF(housenumber_addition = "", CONCAT(housenumber,housenumber_addition ), housenumber_addition ) AS adres, sex
FROM customer
WHERE STR_TO_DATE(CONCAT(YEAR(NOW()), '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d') BETWEEN NOW() AND NOW() + INTERVAL 7 DAY

Обновление

Как указывает @GordonLinoff, это не сработает, если неделя пересекается с концом года, а дата рождения находится в начале января (например, NOW () = '2018-12-28' и дата рождения ='1985-01-02').Чтобы этот случай работал, необходимо также проверить дату рождения в YEAR(NOW())+1, то есть

SELECT firstname, lastname, IF(housenumber_addition = "", CONCAT(housenumber,housenumber_addition ), housenumber_addition ) AS adres, sex
FROM customer
WHERE STR_TO_DATE(CONCAT(YEAR(NOW()), '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d') BETWEEN NOW() AND NOW() + INTERVAL 7 DAY OR
    STR_TO_DATE(CONCAT(YEAR(NOW())+1, '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d') BETWEEN NOW() AND NOW() + INTERVAL 7 DAY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...