2014-09-27 2 views
1

У меня есть простая таблица MYSQL, где я храню день рождения с датой типа данных. Строки:MYSQL выбрать день рождения по возрасту

birthday 
-------- 
1989-09-08 

Я хочу выбрать пользователей с возрастом 25 лет. Я использую следующий запрос:

SELECT birthday FROM `users` WHERE birthday >= now() - INTERVAL 25 YEAR; 

Это должно вернуть строку выше, но потому, что этот день рождения более чем 25 лет и менее 26 лет, MYSQL не возвращает его. Он возвращается, когда я выбираю INTERVAL 26 YEAR

Есть ли более правильный запрос к использованию?

+1

try birthday> = date_sub (curdate(), interval 25 год) –

ответ

3

У вас есть сравнение в обратном направлении. Вы хотите:

WHERE birthday <= now() - INTERVAL 25 YEAR; 

Для диапазона используйте:

WHERE birthday <= now() - INTERVAL 18 YEAR and 
     birthday > now() - INTERVAL 26 YEAR 
+0

Как я могу выбрать диапазон от 18 лет до 25 лет? Я попробовал диапазон, но это привело к той же проблеме. –

+0

Вы заменили бы «25» на «18» в вышеуказанном запросе. –

1

Для диапазона можно также использовать BETWEEN, поставить самую раннюю дату первого

WHERE birthday BETWEEN 
    CURRENT_DATE - INTERVAL 26 YEAR + INTERVAL 1 DAY 
    AND CURRENT_DATE - INTERVAL 18 YEAR 

Другой способ, но не рекомендуется с большой данные

WHERE TIMESTAMPDIFF(YEAR, birthday) BETWEEN 18 AND 25