所以我在使用SQL中的函数时遇到了一些问题,在该函数中我计算了给定日期的年龄。事实是,我需要用当前日期和出生日期进行验证,如果它已经是年份了。
例如,我在寄存器中的日期是1994-11-15,并且在通过
查询信息时 select EmployeeID Num_Emloyee, concat(FirstName, " . ", LastName) Name_Employee, Title Puesto, fn_Age(BirthDate) Edad, fn_Age(HireDate) WorkYears
from 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
该功能中我没有考虑什么吗?
答案 0 :(得分:1)
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)
答案 1 :(得分:1)
您还可以使用timestampdiff功能
select timestampdiff(year, '1994-11-15', now());