0

データベースからの文字列の選択に問題があります。問題は、行に+(123)-4 56-7があり、文字列1234567で検索すると結果が見つからないことです。助言がありますか?

4

4 に答える 4

0

ユーザー定義関数を使用して、文字列から数値を取得できます。

CREATE FUNCTION GetNumeric (val varchar(255)) RETURNS tinyint 
 RETURN val REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';

CREATE FUNCTION GetNumeric (val VARCHAR(255)) 
 RETURNS VARCHAR(255)
BEGIN
 DECLARE idx INT DEFAULT 0;
 IF ISNULL(val) THEN RETURN NULL; END IF;

 IF LENGTH(val) = 0 THEN RETURN ""; END IF;

 SET idx = LENGTH(val);
  WHILE idx > 0 DO
  IF IsNumeric(SUBSTRING(val,idx,1)) = 0 THEN
   SET val = REPLACE(val,SUBSTRING(val,idx,1),"");
   SET idx = LENGTH(val)+1;
  END IF;
  SET idx = idx - 1;
  END WHILE;
  RETURN val;
 END;

それで

Select columns from table
where GetNumeric(phonenumber) like %1234567%;
于 2012-05-14T07:06:20.310 に答える
0

REPLACE()メソッドを使用して mysql の特殊文字を削除できますが、非常に効率的かどうかはわかりません。しかし、それはうまくいくはずです。

于 2012-05-14T06:59:46.500 に答える
0

置換関数を次のように使用してクエリ -

select * from phoneTable where replace(replace(replace(phone, '+', ''), '-', ''), ')', '(') LIKE '%123%'
于 2012-05-14T07:03:19.063 に答える
0

SOには、非常によく似た質問をカバーする別のスレッドがすでにあります。こちらを参照してください。

検索しているのが常にこの種のパターンであり、テーブルがかなり大きい場合は、適切に調整すればどの ofc が機能するREPLACE()かをお勧めします。REGEX()

フォーマット文字データをまったく含まないプレーンな電話番号の列を追加することをお勧めします。さらに良いのは、電話番号のハッシュです。このようにして、新しい列にインデックスを追加し、これに対して検索できます。データベースの観点からは、これははるかに簡単で高速です。

于 2012-05-14T07:04:20.843 に答える