所以我在使用SQL函数计算给定日期的年龄时遇到一些问题。事情是,我需要用当前日期和出生日期进行验证(如果已经是年份或不是年份)。
例如,我在寄存器中的日期是1994-11-15,并且在咨询以下信息时select EmployeeID Num_Emloyee, concat(FirstName, " . ", LastName) Name_Employee, Title Puesto, fn_Age(BirthDate) Edad, fn_Age(HireDate) WorkYearsfrom employees;
它返回24,但是如果我仅参考select函数,它将返回23,即正确答案。
目前,这是我用来验证年龄的函数,它是:
create function fn_Age(dateVal date)
returns int
begin
declare age int;
if day(now()) and month(now()) >= day(dateVal) and month(dateVal) then
set age=year(now())-year(dateVal);
else
set age=(year(now())-year(dateVal)) - 1;
end if;
return age;
end
我在功能中没有考虑什么吗?
最佳答案
day(now()) and month(now()) >= day(dateVal) and month(dateVal)
这种逻辑没有道理。我不知道
if
是否在MySQL中支持元组。如果是这样,您可以执行以下操作:(month(now()), date(now())) >= ( month(dateval), day(dateval) )
(这在MySQL
WHERE
子句中有效。)您也可以这样做:
month(now()) * 100 date(now()) >= month(dateval) * 100 + day(dateval)