[英]MySQL - Replace spaces from a column in query
在查询中,我正在将手机号码与另一列中的另一个(手机)值进行比较。
到目前为止,我正在通过...WHERE `table_one`.`mobile` != `table_two`.`mobile
问题是存在相同的移动电话号码,但在每个列中用不同的空格隔开,即07711 123 456
和07711 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.