Функция в mysql - не функционирует всегда [закрытая]

это первый раз, который я спрашиваю в 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, возвращает 'не подходящий'.

Они могли бы давать мне идею, где я ошибаюсь? Спасибо!

-1
задан 14.10.2019, 09:12
1 ответ

Она 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
0
ответ дан 25.10.2019, 00:05
  • 1
    Что хороший arregló тема, однако я комментирую тебе, что представленная ошибка tomarí в con.o typo так как generó писания плохо пары стоимости, ввиду предыдущего terminarí в закрывшая твой вопрос я рекомендую тебе читать CГіmo спрашивать и шага проверять , пробежавший – Aprendiz 14.10.2019, 11:05

Теги

Похожие вопросы