У меня есть таблица под названием «пользователи». Внутри пользователей есть 3 столбца: id, name, birth_date (например: '2015-10-25').SQL-помощь, необходимая для запроса на день рождения
Я хочу сделать запрос, который возвращает идентификаторы пользователей, у которых есть дни рождения сегодня. Так я придумал:
SELECT id FROM users WHERE timestampdiff(day, cast(('2015' + '-' + extract(month from date) + '-' + extract(day from date)) as date), now()) % 365 = 0;
Это не работает, но это:
SELECT id FROM users WHERE timestampdiff(day, birth_date, now()) % 365 = 0;
** Это работает потому, что год в записи составляет 2015, что больше, чем 2012 , который является первым високосным годом, уходящим с настоящего времени. Так, если год в записи будет в период между 2012 и 2007, приведенный выше запрос должен быть различным для того, чтобы работать и показывать идентификатор человека день рождения:
SELECT id FROM users WHERE timestampdiff(day, birth_date, now()) % 365 = 1;
Так что каждые 4 года далее, увеличивает номер ,
Вопрос в том, можно ли объединить строки внутри функций литья и использовать литые внутри timestampdiff? Первый запрос попытается заменить год в записи birth_date. Это необходимо для того, чтобы избежать различий в значениях модуля в течение високосного года, чтобы сохранить его 0. Заранее благодарим!
Почему бы вам не делать «где месяц (birth_date) = month (now()) И day (birth_date) = day (now()) '? – jae555
, потому что мне действительно нужны пользователи, у которых есть bdays за 7 дней, поэтому я не могу использовать месяц и день, потому что, если, например, у меня есть bday во 2-м месяце, это не сработает. Мне нужно что-то, чтобы дать мне разницу в 7 дней. – user3274898