2012-12-05 62 views
1

我想在mysql中實現一個基於計算返回年齡的過程。 出生日期(DATE)被傳入,然後計算完成。應該是比較直接的,但我似乎無法讓它工作。我不確定這是否是「選擇聲明」的適當情況,如果這非常簡單,我很抱歉,但這是我在程序中的第一次運行。如何計算MySQL存儲過程中的年齡?

如果有人可以請告訴我我做錯了什麼,它將不勝感激。

謝謝!

P.S.我有一個名爲「PERSON」的表,其中包含「age」(int)字段,該字段在調用存儲過程之前一直是空的。

DELIMITER $$ 
CREATE PROCEDURE determineAge(IN birthDate DATE) 
BEGIN 
DECLARE today TIMESTAMP; 
SELECT DATEDIFF(today,birthdate)/365 AS ageInYears 
FROM PERSON; 
END $$ 
DELIMITER ; 

call determineAge('June 25, 1981'); 

回答

2

This Works。無需聲明「今天」 - 只需在查詢中使用NOW()函數即可。

另外,不需要選擇FROM任何東西......你只是查詢一個單一的值。

您的日期被誤格式化(MySQL的需要'YYYY-MM-DD',並且要落地的差異來獲得的年一個整數。

DELIMITER $$ 
CREATE PROCEDURE determineAge(IN birthDate DATE) 
BEGIN 
    SELECT FLOOR(DATEDIFF(NOW(), DATE(birthdate))/365); 
END $$ 
DELIMITER ; 

CALL determineAge('1981-06-25'); 

最後,理論上你就可以返回年份值作爲OUT PARAM如果你想,雖然查詢結果就好了。

DELIMITER $$ 
CREATE PROCEDURE determineAge(IN birthDate DATE, OUT age INT) 
BEGIN 
    SELECT FLOOR(DATEDIFF(NOW(), DATE(birthdate))/365) INTO age; 
END $$ 
DELIMITER ; 

你去那裏!

+0

謝謝你這麼多的解釋!請問接受!出於最小限度,你介意在這種情況下顯示OUT參數如何工作?再次感謝 –

+0

完成。底部添加了'OUT'參數示例。 –

+1

'TIMESTAMPDIFF(YEAR,birthdate,NOW());'應該也能工作,並且它更具可讀性。 –