MySQL 函数 ONLY_NUMBERS

MySQL Function ONLY_NUMBERS

如有任何帮助,我们将不胜感激!

我需要 MySQL 中的函数,就像我在 PHP 库中的函数一样,我将其称为 "onlyNumbers",此函数循环所有字符串过滤数字并连接为return 字符串.

我可以遵循 MySQL 语法的逻辑并重现它,如下所示,但是缺少一些东西,我认为是一个技巧,或者一些我没有想到的简单步骤。

当 运行 在 MySQL 中创建函数时,但当我调用它时出现此错误:#2014 - 命令不同步;你现在不能运行这个命令

这是我的函数代码:

如果存在则删除函数 ONLY_NUMBERS;
分隔符 $$
创建函数 ONLY_NUMBERS(_STR TEXT) RETURNS 文本确定性
    开始
        声明数字文本;
        声明 _STR_CHAR CHAR(1) 默认 NULL;
        声明 _STR_POS BIGINT(20) 默认值 0;
        声明 _STR_INIT BIGINT(20) 默认值 0;
        声明 _STR_ENDS BIGINT(20) 默认值 0;
        设置 _STR_ENDS = CHAR_LENGTH(_STR);
        STRING_LOOP:循环
            如果 _STR_POS = STR_ENDS 那么
                离开 STRING_LOOP;
            万一;
            SET _STR_CHAR = SUBSTR(_STR,_STR_POS,1);
            IF _STR_CHAT REGEXP '^[0-9]$' 那么
                设置数字 = CONCAT(数字,_STR_CHAR);
            万一;
            SET _STR_POS = _STR_POS + 1;
            迭代 STRING_LOOP;
        结束循环STRING_LOOP;
        RETURN 数字;
    结束 $$
分隔符;

当我调用 SELECT ONLY_NUMBERS('sadfasdf3423452345234'); 我期待看到 3423452345234 作为结果

好的,我们开始吧!

经过很多很多次的尝试,终于达到了我的预期!

这是一个 return 仅将字符串中的数字作为参数的函数,我在速度、权重、更少的声明、更少的内存等方面做了一些改进...

这是功能,记住这是使用核心 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 ;