Я бы просто использовал логику даты MySQL.Вы можете быть хитрым и использовать тот факт, что столбец DOB хранится в виде текста, вот так:
SELECT whatever FROM users WHERE dob LIKE DATE_FORMAT(CURDATE(), '%d/%m/%%');
Это будет принимать текущую дату, отформатировать ее как дату в Великобритании (%% превращается в единый%).Так что на сегодня (как я пишу), это будет «20/12 /%».Он использует это для LIKE на dob, давая вам всех с днем рождения '20 /12/(something)'.
Это немного странно, но на самом деле используется преимущество сохранения DOB в тексте.формат.Я предполагаю индекс DOB, хотя вы могли бы обойтись без него, если у вас не слишком много людей.
Для второго запроса, похоже, вы пытаетесь сделать «Люди, которыеродились 6 месяцев назад 'типа вещь.Это правильно?Вы могли бы примерно так:
SELECT whatever FROM users WHERE DATE_ADD(CURDATE(), INTERVAL -6 MONTH) = STR_TO_DATE(dob, '%d/%m/%Y');
Это не красиво, и если вы хотите, чтобы люди, которые родились 6, 18, 30 ... месяцев назад, это не сработает.В этом случае, я бы на самом деле пошел с чем-то вроде того, что у вас есть.Это не идеально, но это более или менее сработает, и результаты могут быть достаточно близки для вас.