это первый раз, который я спрашиваю в stackOverflow (если я это врежу, ведите меня пожалуйста). У меня нет большого количества опыта с функциями в mysql, и я не понимаю, что я врежу, так что, после того, как он очень хожу, я прошу у них помощь: У меня есть два подмостков: taekwondista
и Ваша специализация competidor
, они идентифицируются из-за Вашего pk: cert-itf
и Ваш fk: taekwondista-id
соответственно.
В таблице СОПЕРНИК у меня есть колонна fecha-nacimiento
поскольку один восходил.
Я хочу, чтобы функция возвратила мне 'взрослый' varchar, если сопернику между 18 и 35 годами, или 'юношеский', если он имеет между 14 и 18 или 'не подходящий', если он снаружи обоих рангов.
Функция, которую я сделал, получает параметром cert-itf, который будет консультироваться:
CREATE DEFINER=`root`@`localhost` FUNCTION `prueba1`(`xcertitf` int)
RETURNS varchar(500) CHARSET utf8 COLLATE utf8_spanish_ci
NO SQL
BEGIN
declare fecha varchar(500);
declare respuesta varchar(500);
select `fecha-nacimiento` into fecha
from competidor join taekwondista
where `cert-itf`= `taekwondista-id` and `cert-itf`=`xcertitf` limit 1;
if (fecha between 1984-01-01 and 2000-12-31) then
set respuesta = 'adulto';
elseif (fecha between 2001-01-01 and 2006-01-01) then
set respuesta = 'juvenil';
else
set respuesta = 'no apto';
end if;
return respuesta;
END
Проблема, которая появляется, состоит в том, что с какими-то доказательствами оно, кажется, не функционирует, в каких-то случаях вместо того, чтобы возвращать 'юношеский' для соперников, рожденных в 2005, возвращает 'не подходящий'.
Они могли бы давать мне идею, где я ошибаюсь? Спасибо!
Она soluciГіn в проблему был где я indicГі пользователь CГ©sar:
¿Esas fechas no tendrían que ir entre comillas? Porque sino parece que estás realizando algun tipo de operación aritmética restando números. Tal vez por ahí vaya el problema.
Так что agreguГ© кавычки, соответствующие данным о типе Я ДАТИРОВАЛ и comenzГі, чтобы возвращать ожидаемые результаты:
CREATE DEFINER=`root`@`localhost` FUNCTION `prueba1`(`xcertitf` int)
RETURNS varchar(500) CHARSET utf8 COLLATE utf8_spanish_ci
NO SQL
BEGIN
declare fecha varchar(500);
declare respuesta varchar(500);
select `fecha-nacimiento` into fecha
from competidor join taekwondista
where `cert-itf`= `taekwondista-id` and `cert-itf`=`xcertitf` limit 1;
if (fecha between '1984-01-01' and '2000-12-31') then
set respuesta = 'adulto';
elseif (fecha between '2001-01-01' and '2006-01-01') then
set respuesta = 'juvenil';
else
set respuesta = 'no apto';
end if;
return respuesta;
END