2017-04-14 18 views
0

私は最後の6桁に基づいて電話番号を照合しようとしています。問題は、データベース内の数値がさまざまな形式であり、数値の中に空白があることです。MySQL SELECT文がWHERE句の空白を削除します

SELECT * FROM users WHERE trim(phone) LIKE '%123456' 

トリムだけで先頭と末尾の空白を削除し、クライアントが数字の間に空白で自分の番号を入力したエントリが見つかりません。それでは、どのようになど、

を 123 456 12 34 56検索内の空白を削除しますか?空白なしの結果は十分ではありません。 replaceを使用してデータベースを更新することもできません。

答えて

0

replace()を使用すると、文字列内のすべての '' to ''を置き換えることができます。

mySQL documentation

REPLACE(str,from_str,to_str) 

はfrom_str文字列to_strに置き換えた文字列のすべての出現strを。 REPLACE()は、from_strを検索するときに大文字と小文字を区別した一致を実行します。

SELECT * FROM users WHERE Replace(coalesce(Phone,''), ' ','') LIKE '%123456' 

私が奇妙に思えるwhere句で実行できない場合は、選択肢に入れ子にするだけです。

Select sub.* 
from (Select u.*, Replace(coalesce(Phone,''), ' ','') as ph 
       from users u) sub 
where sub.ph LIKE '%123456' 
+0

実際に私はこれをしようとしましたが、私はphpMyAdminに上のエラーを取得:「#1064 - あなたのSQL構文でエラーが発生している。近くに使用する権利構文については、ご使用のMariaDBサーバーのバージョンに対応するマニュアルを確認してください」 。 trim()関数ではエラーは発生しませんが、何らかの理由でreplace()が機能しません。 –

+0

私はいくつかの電話番号がNULLであると推測していますので、それらを空集合に集約する必要があります。 – xQbert

+0

まだ合体では機能しません。置き換えは、SELECTの後にのみ動作します(その結果、数値は右にフォーマットされますが、WHEREの後にはありません)。 –

関連する問題