MySQL去除非数字字符进行比较

标签 mysql regex

我希望在表中查找与用户输入的特定数字相匹配的记录。因此,用户可以输入 12345,但在数据库中这可能是 123zz4-5。

如果 PHP 函数在 MySQL 中工作,我想这样的事情会起作用。

SELECT * FROM foo WHERE preg_replace("/[^0-9]/","",bar) = '12345'

仅使用 MySQL 的等效功能或方法是什么?

速度并不重要。

最佳答案

我意识到这是一个古老的话题,但是在谷歌搜索这个问题时我找不到一个简单的解决方案(我看到了可敬的代理,但认为这是一个更简单的解决方案)所以这是我写的一个函数,似乎工作得很好.

DROP FUNCTION IF EXISTS STRIP_NON_DIGIT;
DELIMITER $$
CREATE FUNCTION STRIP_NON_DIGIT(input VARCHAR(255))
   RETURNS VARCHAR(255)
BEGIN
   DECLARE output   VARCHAR(255) DEFAULT '';
   DECLARE iterator INT          DEFAULT 1;
   WHILE iterator < (LENGTH(input) + 1) DO
      IF SUBSTRING(input, iterator, 1) IN ( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ) THEN
         SET output = CONCAT(output, SUBSTRING(input, iterator, 1));
      END IF;
      SET iterator = iterator + 1;
   END WHILE;
   RETURN output;
END
$$

关于MySQL去除非数字字符进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/287105/

相关文章:

javascript - JS代码高亮正则表达式

java - 使用正则表达式从 Java 字符串中提取包含单词的行

Ruby:为什么等号在文字正则表达式中会导致解析错误?

java - 有效结尾的正则表达式

javascript - 如何检查javascript中以空格结尾的字符串?

php - 如何使用php从mysql表循环多维数组

php - 如何在 PHP 中删除数组中数组的索引计数

mysql - 我的查询需要什么样的索引?

mysql - 如何按 MAX(日期)选择?

mysql - 更新索引中使用的列的效率有多低