2017-05-02 12 views
0

私は、英国の町のリストとそのうちの1つが「Connah's Quay」であるMySQLデータベースを持っています。アポストロフィを含むキーワードのMySQL検索

アポストロフィを使用しているかどうかに関わらず、「Connah's Quay」の結果を返すことができるようにするため、「Connah's Quay」と「Connahs Quay」は「Connah's Quay」を返します。

アポストロフィを使用しているかどうかにかかわらず、どちらのバージョン(アポストロフィなし)を含むフィールドを作成するのではなく、結果を返すSQLクエリがありますか?

QUERY:

SELECT * FROM uk_postcodes WHERE postal_town LIKE "connahs%"; 
+0

あなたのクエリが現在どのように見えるかによって異なりますが、まだ作成していないクエリがありますか?あなたはLIKEや正規表現を使うことができます。 –

+0

'LIKE" connah% ";' - 's'を削除します。 –

+0

私は、おかげで、クエリを追加しました。 – Reado

答えて

1

標準的なアプローチは、データを正規化し、その上で検索するようになり、そのような何か:

SELECT * FROM uk_postcodes WHERE REPLACE(postal_town, '''', '') LIKE 'connahs%'; 

は、これはその場で行うことが少し恐ろしいです(とはあなたはテーブルに保存する方がいいでしょう。(また、「Stow-cum-Quy」対「Stow cum Quy」などと対話することもできます)

+0

それはうまくいきますが、私はあなたのインデックスがフレンドリーではないということを理解しています。あなたはテーブル上の店でどういうことを説明してください。 – Reado

+1

正規化されたデータを持つ別の列を作成してください(または、より良いことに、町の名前の「良い」バージョン用の別のテーブルを用意して、それに外部キーを設定してください;ユーザーが生成したデータを検索しようとしていると仮定します) –

0

これを試すことがあります:

SELECT * 
FROM uk_postcodes 
WHERE REPLACE(postal_town,"'","") LIKE CONCAT(REPLACE("connah's","'",""),"%"); 

これは、比較の前に検索用語と列の値の両方からアポストロフィを削除します。

関連する問題