所以我在使用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)

10-04 10:58