繁体   English   中英

MySQL-替换查询列中的空格

[英]MySQL - Replace spaces from a column in query

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

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

问题是存在相同的移动电话号码,但在每个列中用不同的空格隔开,即07711 123 45607711 123456因此在匹配时返回结果。

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

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

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

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

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

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

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM