2014-09-27 103 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

嘗試生日> = date_sub(curdate(),interval 25年) – 2014-09-27 16:31:50

回答

3

你有反向比較。你想:

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

對於一個範圍,使用方法:

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

我如何選擇18年到25年的範圍?我嘗試了範圍,但它導致相同的問題 – 2014-09-27 17:49:55

+0

您將在上述查詢中將「25」替換爲「18」。 – 2014-09-27 19:48:30

1

對於範圍還利用之間,把最早的日期第一

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