我正在尝试在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');
答案 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 ;
你去吧!