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