Функция MySQL ONLY_NUMBERS

Любая помощь здесь будет оценена!

Мне нужна функция в MySQL, как у меня здесь, в моих PHP-библиотеках, я называю это «onlyNumbers», эта функция зацикливает все номера фильтрации строк и объединяет их как возвращаемую строку.

Я мог бы следовать логике синтаксиса MySQL и воспроизвести это, как вы видите ниже, но чего-то не хватает, я думаю, трюк или какой-то простой шаг, который не приходит мне в голову.

При запуске этого в MySQL функция создается, но когда я вызываю ее, я получаю эту ошибку: # 2014 - Команды не синхронизированы; вы не можете запустить эту команду сейчас

Вот мой код функции:

DROP FUNCTION IF EXISTS ONLY_NUMBERS;
DELIMITER $$
CREATE FUNCTION ONLY_NUMBERS(_STR TEXT) RETURNS TEXT DETERMINISTIC
    BEGIN
        DECLARE NUMBERS TEXT;
        DECLARE _STR_CHAR CHAR(1) DEFAULT NULL;
        DECLARE _STR_POS BIGINT(20) DEFAULT 0;
        DECLARE _STR_INIT BIGINT(20) DEFAULT 0;
        DECLARE _STR_ENDS BIGINT(20) DEFAULT 0;
        SET _STR_ENDS = CHAR_LENGTH(_STR);
        STRING_LOOP: LOOP
            IF _STR_POS = STR_ENDS THEN
                LEAVE STRING_LOOP;
            END IF;
            SET _STR_CHAR = SUBSTR(_STR,_STR_POS,1);
            IF _STR_CHAT REGEXP '^[0-9]$' THEN
                SET NUMBERS = CONCAT(NUMBERS, _STR_CHAR);
            END IF;
            SET _STR_POS = _STR_POS + 1;
            ITERATE STRING_LOOP;
        END LOOP STRING_LOOP;
        RETURN NUMBERS;
    END $$
DELIMITER ;

Когда я вызываю SELECT ONLY_NUMBERS('sadfasdf3423452345234'); я ожидаю увидеть в результате 3423452345234


person Newton Pasqualini Filho    schedule 13.02.2015    source источник


Ответы (1)


Хорошо, поехали!

После многих, многих, многих попыток я получил то, что ожидал!

Это функция, которая возвращает только числа из строки в качестве аргумента, я сделал некоторые улучшения со скоростью, весом, меньшим количеством объявлений, меньшим объемом памяти и т. д.

Вот функция, помните, что она использует основной сервер MySQL, вам не нужно ничего устанавливать: DROP FUNCTION IF EXISTS ONLY_NUMBERS; DELIMITER // CREATE FUNCTION ONLY_NUMBERS(_STR TEXT) RETURNS TEXT DETERMINISTIC BEGIN DECLARE _NUMBERS TEXT; DECLARE _STR_POS BIGINT(20) DEFAULT 0; DECLARE _STR_ENDS BIGINT(20) DEFAULT 0; SET _STR_ENDS = CHAR_LENGTH(_STR); SET _NUMBERS = ''; WHILE _STR_POS <= _STR_ENDS DO IF SUBSTR(_STR, _STR_POS, 1) REGEXP '^[0-9]$' THEN SET _NUMBERS = CONCAT(_NUMBERS, SUBSTR(_STR, _STR_POS, 1)); END IF; SET _STR_POS = _STR_POS + 1; END WHILE; RETURN _NUMBERS; END // DELIMITER ;

person Newton Pasqualini Filho    schedule 20.02.2015