在查询中,我将手机号码与另一列中的另一个(移动)值进行比较。
到目前为止,我通过像...WHERE `table_one`.`mobile` != `table_two`.`mobile
问题是有相同的手机号码,但每列中的不同空格分开,即07711 123 456
和07711 123456
,因此当匹配时会返回结果。
我知道如何在更新期间执行此操作,例如update `table` set number = REPLACE( number, ' ', '');
,但我看不到在查询过程中执行此操作的任何示例。也许做一个检查,放入一个MySQL变量,在附加列中对其他移动设备做同样的事情,然后比较这两个变量?
答案 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)