如何在MySQL存储过程中计算年龄?

时间:2012-12-05 01:22:49

标签: php mysql sql

我正在尝试在mysql中实现一个基于计算返回年龄的过程。 传递出生日期(DATE),然后计算完成。应该是相对直接的,但我似乎无法让它工作。我不确定这是否适合“选择陈述”和 如果这非常简单,我很抱歉,但这是我第一次在程序中运行。

如果有人能告诉我我做错了什么,我将不胜感激。

谢谢!

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');

1 个答案:

答案 0 :(得分:2)

这很有效。无需声明“今天” - 只需在查询中使用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参数返回,尽管查询结果很好。

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

你去吧!