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的主要内容,如果未能解决你的问题,请参考以下文章

mysql的decode函数

MySQL函数的其他函数

在mysql中自定义的函数怎么调用

关于mysql的PASSWORD函数

MySQL函数MySQL 5.5从零开始学第六章

Mysql单行函数