2012-12-12 31 views
1
年齡

條件我使用的查詢,我需要從用戶選擇行記錄,其中(多個年齡)mysql如何選擇,其中由

像我有表用戶3個用戶3場之間年齡:

ID | NAME | DOB

1 | A | 12-06-1980
2 | B | 12-06-1970
3 | C | 12-06-1990
4 | D | 12-06-1995
5 | E | 1985年12月6日

現在,如果我想在25歲以下的用戶列表中選擇出把

名稱|出生日期

C | 12-06-1990
D | 12-06-1995

什麼查詢應該是這個任何想法?

SELECT * FROM users WHERE DOB 

? 任何想法

+0

選中此項:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html – erenon

回答

9

試試這個::

SELECT * FROM users WHERE DATEDIFF(CURDATE(), DOB)/365<25 

爲了讓年齡在年:

SELECT 
FLOOR(tempUsers.t/365) as `years` 
tempUsers.t%365 as `months` 
from 
(
SELECT DATEDIFF(CURDATE(), DOB) t FROM users 
) tempUsers 
+0

如果我不想指定25歲,該怎麼辦?我希望它從出生日期的列中查詢年齡內? –

+0

已編輯我的查詢,請檢查 –

+0

不應該tempUsers.t%365是'天'而不是'月'...年%12是幾個月... – patrick

2
select * 
from users 
where DOB >= ADDDATE(CURRENT_DATE(), INTERVAL -25 YEAR); 
2

你可以這樣說:

SELECT * FROM users WHERE DOB >= (CURDATE() - INTERVAL 25 YEAR) 

要從計算上述查詢中的日期字段,這將是如下:

SELECT * FROM users 
WHERE DOB >= (CURDATE() - INTERVAL FLOOR(DATEDIFF(CURDATE(),dateofbirth)/365) YEAR) 
+0

如果我不想指定25歲,該怎麼辦?我希望它從出生日期的列中查詢年齡內? –

+0

我已經更新了我的答案,其中包含一個計算表中來自「dateofbirth」字段的年齡(上例中爲'25')的示例。 – Nelson

+0

@Nelson:計算在哪裏不會提示返回年齡的日子差異,您需要將條件放在select子句中。 –

0

我會使用這樣的:

select id, name, dob, 
    date_format(curdate(), '%Y') - date_format(dob, '%Y') - 
    (date_format(curdate(), '00-%m-%d') < date_format(dob, '00-%m-%d')) as age 
from users 

它比由365分割,例如更精確。這使2001年這是錯誤的:

SELECT floor(DATEDIFF('4012-12-12', '2012-12-12')/365) 

,而這給了2000這是正確的:

select 
    date_format('4012-12-12', '%Y') - date_format('2012-12-12', '%Y') - 
    (date_format('4012-12-12', '00-%m-%d') < date_format('2012-12-12', '00-%m-%d')) 

,如果你只需要計算只是一個時代,然而,這兩種解決方案應該工作。