MySQL 函数 ONLY_NUMBERS
Posted
技术标签:
【中文标题】MySQL 函数 ONLY_NUMBERS【英文标题】:MySQL Function ONLY_NUMBERS 【发布时间】:2015-02-13 17:36:18 【问题描述】:这里的任何帮助将不胜感激!
我需要一个 mysql 中的函数,就像我的 php 库中的函数一样,我将其称为“onlyNumbers”,此函数循环所有字符串过滤数字并连接为返回字符串。
我可以遵循 MySQL 语法的逻辑并重现它,如下所示,但是缺少一些东西,我认为是一个技巧,或者一些我没有想到的简单步骤。
在 MySQL 中运行此函数时,该函数已创建,但当我调用该函数时出现此错误:#2014 - 命令不同步;你现在不能运行这个命令
这是我的功能代码:
如果仅存在_NUMBERS 则删除函数; 分隔符 $$ CREATE FUNCTION ONLY_NUMBERS(_STR TEXT) 返回文本确定性 开始 声明数字文本; DECLARE _STR_CHAR CHAR(1) DEFAULT NULL; DECLARE _STR_POS BIGINT(20) 默认 0; DECLARE _STR_INIT BIGINT(20) 默认 0; DECLARE _STR_ENDS BIGINT(20) 默认 0; SET _STR_ENDS = CHAR_LENGTH(_STR); STRING_LOOP:循环 如果 _STR_POS = STR_ENDS 那么 离开STRING_LOOP; 万一; SET _STR_CHAR = SUBSTR(_STR,_STR_POS,1); 如果 _STR_CHAT 正则表达式 '^[0-9]$' THEN SET NUMBERS = CONCAT(NUMBERS, _STR_CHAR); 万一; 设置 _STR_POS = _STR_POS + 1; ITERATE STRING_LOOP; 结束循环 STRING_LOOP; 返回号码; 结束 $$ 分隔符;当我调用 SELECT ONLY_NUMBERS('sadfasdf3423452345234'); 我希望看到 3423452345234 结果
【问题讨论】:
【参考方案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 ;
【讨论】:
以上是关于MySQL 函数 ONLY_NUMBERS的主要内容,如果未能解决你的问题,请参考以下文章