Проверка возраста с использованием функции в MySQL - PullRequest
0 голосов
/ 10 ноября 2018

, поэтому у меня возникли некоторые проблемы с использованием функции в 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, однако, если я проконсультируюсь только с выбором функции, возвращается 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

Есть ли что-то, что я не рассматриваю в функции?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы также можете использовать timestampdiff -функция

select timestampdiff(year, '1994-11-15', now());
0 голосов
/ 10 ноября 2018
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...