我希望在表中查找与用户输入的特定数字相匹配的记录。因此,用户可以输入 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/