MySQL - 在查询中替换列中的空格

时间:2013-10-03 10:01:22

标签: mysql regex database replace

在查询中,我将手机号码与另一列中的另一个(移动)值进行比较。

到目前为止,我通过像...WHERE `table_one`.`mobile` != `table_two`.`mobile

这样的方式来做这件事

问题是有相同的手机号码,但每列中的不同空格分开,即07711 123 45607711 123456,因此当匹配时会返回结果。

我知道如何在更新期间执行此操作,例如update `table` set number = REPLACE( number, ' ', '');,但我看不到在查询过程中执行此操作的任何示例。也许做一个检查,放入一个MySQL变量,在附加列中对其他移动设备做同样的事情,然后比较这两个变量?

3 个答案:

答案 0 :(得分:1)

您也可以在选择查询中使用REPLACE:

select REPLACE( '07711 123 456', ' ', '');
+------------------------------------+
| REPLACE( '07711 123 456', ' ', '') |
+------------------------------------+
| 07711123456                        |
+------------------------------------+
1 row in set (0.06 sec)

答案 1 :(得分:0)

@Nadeem_MK,谢谢你。我设法编写了我需要的查询而不需要太多努力。

...WHERE (REPLACE(`tbl_one`.`mobile`, ' ', '')) != (REPLACE(`tbl_two`.`mobile`, ' ', ''))

我确实尝试过TRIM函数,但我只能设法清除前导空格或尾随空格,并且使用两个select语句,查询比我使用REPLACE函数时更长。

答案 2 :(得分:0)

您可以创建一个使用正则表达式仅允许数字的函数。这样它将删除+ - ()或任何不是整数的可能字符

DELIMITER $$

CREATE FUNCTION `fn_ShowOnlyNumbers`(str VARCHAR(1000)) RETURNS varchar(1000) CHARSET latin1
BEGIN
  DECLARE counter INT DEFAULT 0;
  DECLARE strLength INT DEFAULT 0;
  DECLARE strChar VARCHAR(1000) DEFAULT '' ;
  DECLARE retVal VARCHAR(1000) DEFAULT '';

  SET strLength = LENGTH(str);

  WHILE strLength > 0 DO
    SET counter = counter+1;
    SET strChar = SUBSTRING(str,counter,1);
    IF strChar REGEXP('[0-9]') = 1
      THEN SET retVal = CONCAT(retVal,strChar);
    END IF;
    SET strLength = strLength -1;
    SET strChar = NULL;
  END WHILE;
RETURN retVal;
END

然后你可以在where子句中使用该函数。

...WHERE `table_one`.fn_ShowOnlyNumbers(mobile) != `table_two`.fn_ShowOnlyNumbers(mobile)