Процедура и функция (не требует таблицы базы данных):
Код: Выделить всё
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(
IN variants VARCHAR(50)
)
BEGIN
DECLARE counter INT DEFAULT 0;
SET
@validated_params = FALSE,
@params_number = (CHAR_LENGTH(variants) - CHAR_LENGTH(REPLACE(variants, ';', '')) + 1
);
SET
@correct_params = JSON_ARRAY('[3, 1]');
WHILE counter < @params_number DO
SET
counter = counter + 1;
SET
@variant = split_string(@variants, ';', counter);
IF @variant > 0 THEN
SET
@correct_params = JSON_ARRAY_APPEND(@correct_params, '$', @variant);
END IF;
END WHILE;
IF JSON_LENGTH(@correct_params) = @params_number THEN
SET
@validated_params = TRUE;
END IF;
SELECT variant_number FROM JSON_TABLE(@correct_params, '$[*]' COLUMNS (variant_number INT PATH '$')) AS variant_number;
END
Код: Выделить всё
CREATE DEFINER=`root`@`localhost` FUNCTION `split_string`(
string_to_split VARCHAR(250),
delimimiter VARCHAR(5),
position INT
) RETURNS int
DETERMINISTIC
BEGIN
SET
@splitted_string = REPLACE(
SUBSTRING(
SUBSTRING_INDEX(string_to_split, delimimiter, position),
CHAR_LENGTH(SUBSTRING_INDEX(string_to_split, delimimiter, position - 1)) + 1
), delimimiter, ''
);
SET
@splitted_number = (
CASE WHEN @splitted_string REGEXP '^[0-9]+$' THEN
CAST(@splitted_string AS UNSIGNED) ELSE -1 END
);
RETURN @splitted_number;
END
Код: Выделить всё
CALL new_procedure('2, b7, vb, 9');
variant_number
3
1
2
9
Однако я получаю пустую таблицу...
Подробнее здесь: https://stackoverflow.com/questions/799 ... ome-reason
Мобильная версия