2012-10-01 61 views
0

我想確定我的數據庫中列出的人的年齡。這是我想出的,但我似乎無法限制查詢,以顯示只有18歲以下的人。如何確定一個人的年齡

SELECT 
    * 
FROM 
    patientdetails 
WHERE 
    ageInYears IN (
    SELECT 
     DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 AS ageInYears 
    FROM 
     patientdetails p 
) < 19 

回答

1

我相信這樣的事情應該工作:

SELECT * 
FROM patientdetails 
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 < 19 
+0

這實際上不起作用 –

+0

它有什麼問題? –

+0

找不到結果。我知道這確實會返回值。 SELECT DATEDIFF(CURRENT_DATE,STR_TO_DATE(p.DOB,'%d-%m-%Y'))/ 365 AS ageInYears FROM patientdetails p –

0

你不需要的子查詢:

SELECT * 
FROM PatientDetails pd 
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 <19 
+0

這不工作。 –

+0

它不起作用? –

0

這類作品:

SELECT * 
FROM PatientDetails pd 
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(pd.DOB, '%d-%m-%Y'))/365 < 19 

分水嶺365天的日子將無法適應飛躍這意味着你將在4天內得到保證。你可以除以365.25,然後減去0.75。我想認爲佔了一切,但我從臀部拍了一下。我不確定是否會出現整數錯誤。我不確定MySQL如何處理隱式類型轉換。

我會更傾向於這樣做。從邏輯上講,它是「所有患者的19歲生日是在未來」:

SELECT * 
FROM PatientDetails pd 
WHERE DATE_ADD(STR_TO_DATE(pd.DOB, '%d-%m-%Y'), INTERVAL 19 YEAR) > CURDATE() 

然而,這個確切的問題是解決,並在MySQL documentation for date calculations解釋,但似乎有種屁股向後對我說:

SELECT name, birth, CURDATE(), 
(YEAR(CURDATE())-YEAR(birth)) 
- (RIGHT(CURDATE(),5)<RIGHT(birth,5)) 
AS age 
FROM pet 
相關問題