0

クエリで、携帯電話番号を別の列の別の (モバイル) 値と比較しています。

これまでのところ、次のような方法でこれを行っています...WHERE `table_one`.`mobile` != `table_two`.`mobile

問題は、同じ携帯電話番号がありますが、各列に異なるスペースで区切られている07711 123 456ため07711 123456、一致した場合に結果が返されることです。

更新中にこれを行う方法は知っていupdate `table` set number = REPLACE( number, ' ', '');ますが、クエリの途中でこれが行われる例は見当たりません。おそらく、チェックを行い、MySQL 変数に配置し、追加の列で他のモバイルと同じことを行い、2 つの変数を比較しますか?

4

3 に答える 3

1

選択クエリでも REPLACE を使用できます。

select REPLACE( '07711 123 456', ' ', '');
+------------------------------------+
| REPLACE( '07711 123 456', ' ', '') |
+------------------------------------+
| 07711123456                        |
+------------------------------------+
1 row in set (0.06 sec)
于 2013-10-03T10:03:10.470 に答える
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)
于 2013-10-03T10:25:07.910 に答える