Php 如何在MySQL中只查询字符串中的数字

Php 如何在MySQL中只查询字符串中的数字,php,mysql,Php,Mysql,我有一个MySQL查询,需要输入一个包含邮政编码的字段。不幸的是,有些人也在ZIP字段中输入城市名称或郊区。我正在寻找一个只返回字段中的数字的查询代码。除了以下代码外,我在stackoverflow producec错误中已经找到的任何代码: 但是,此代码只删除任何字母数字字符。删除所有a、b、c字符的正确代码是什么 谢谢你的帮助 更新:Syed Noman发布的代码在phpmyadmin中为我工作 然而,当我在php代码中将其添加到我的查询中时,我得到了一个解析错误 下面是产生错误的代码 $q

我有一个MySQL查询,需要输入一个包含邮政编码的字段。不幸的是,有些人也在ZIP字段中输入城市名称或郊区。我正在寻找一个只返回字段中的数字的查询代码。除了以下代码外,我在stackoverflow producec错误中已经找到的任何代码:

但是,此代码只删除任何字母数字字符。删除所有a、b、c字符的正确代码是什么

谢谢你的帮助

更新:Syed Noman发布的代码在phpmyadmin中为我工作

然而,当我在php代码中将其添加到我的查询中时,我得到了一个解析错误

下面是产生错误的代码

$query   = "DROP FUNCTION IF EXISTS digits;
DELIMITER |
CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
BEGIN
  DECLARE i, len SMALLINT DEFAULT 1;
  DECLARE ret CHAR(32) DEFAULT '';
  DECLARE c CHAR(1);

  IF str IS NULL
  THEN 
RETURN "";
 END IF;

SET len = CHAR_LENGTH( str );
REPEAT
  BEGIN
  SET c = MID( str, i, 1 );
  IF c BETWEEN '0' AND '9' THEN 
    SET ret=CONCAT(ret,c);
  END IF;
  SET i = i + 1;
END;
UNTIL i > len END REPEAT;
RETURN ret;
END |
DELIMITER ;

SELECT digits(`asdf`) FROM `12345` WHERE 1 ";

该错误表示最后一个“;”出现问题。

使用REGEXP仅获取数字

SELECT * 
FROM your_table 
WHERE zipcode REGEXP '^[0-9]+$';

希望能有所帮助 预期产量 zipcode列包含

123
145adb
adds142
157
237
输出将是

123
157
237

我想你需要一个用户定义的函数来实现这一点,因为开箱即用。我还没有尝试过,但是你在你链接的问题中看到了公认的答案吗?这可能适合您。为什么不在运行查询之前使用PHP从字符串中删除数字?
123
157
237