web-dev-qa-db-ja.com

MYSQL SELECT LIKE%...%の文字を無視する方法

phone列のテーブルがあり、データの数字の間にスペース、ドット、ダッシュ、または+記号が含まれている場合があります。これらの文字をすべて無視するLIKEワイルドカードを使用して検索を行う必要があります。次に例を示します。

  • レコードには「+ 123-45678.90」の電話が含まれる場合があります
  • 「6789」または適切な数字の完全または不完全なシーケンスを順番に検索するクエリは、そのレコードを表示する必要があります。

残念ながら、元のテーブルをクリーンアップして数字以外の文字を削除し、単純なSELECT LIKE%...%を実行することはできません。

MYSQLには文字列を置換/削除する関数がありますが、widlcardedLIKEを使用してクエリ内で文字を使用する方法を見つけることができません。

どんな助けでも大歓迎です。

14
Henry

これを行うには2つの方法があります。

  1. これらの余分な文字から削除された文字列を準備することができるよりも少数の余分な文字のみを許可し、通常のLIKE演算子を使用する場合

    select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%'
    

    もちろん、許可された追加文字の数と同じ数の置換呼び出しが必要です

  2. 正規表現を使用します。たとえば、パターン123を検索しているとします。

    select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3'
    
33
Hari

部品番号と不要な文字についても同じ問題が発生しました。私の解決策は

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%';
4
Frank