2016-03-22 3 views
4

私はこの1つで壁に頭をぶつけます。内側のスペースを無視してmysql selectクエリ

私はポストコードと通りの名前が入っているテーブルを持っています。私は別のテーブルを持っています(ここには通りの名前がありません)、私は各ポストコードの通りの名前を取得しようとしています。

問題は、テーブル1がスペースなしのポストコードを格納していて、更新しようとしているテーブル2がポストコードをスペースに格納していることです。

したがって、表1では、郵便番号は「l249pb」として格納され、表2では「l24 9pb」として格納されます。今

両方が、私はこのクエリが動作するように期待されるスペースなしつまりまったく同じ形式で格納されたポストコードの場合:

UPDATE Table1 
INNER JOIN Table2 ON (Table1.PostCode = Table2.PostCode) 
SET Table1.StreetName = Table2.StreetName 

私はこれをしようとしたが、それ文句を言わない作業している:

UPDATE Table1 
INNER JOIN Table2 ON (Table1.PostCode = REPLACE(Table2.PostCode,' ','')) 
SET Table1.StreetName = Table2.StreetName 

スペースを無視して一致するかどうかをチェックする方法を教えてもらえますか(すべてのスペースを削除するようなものですが)。

+0

Oppsを指摘してくれてありがとう、私は今それを編集しました –

+0

@ Karthikeyan.R.Sあなたはjoin式でも関数を使うことができるので、OPの解法はうまくいくでしょう。 – Shadow

+2

1)それらが本当にポストコードの2つの部分の間にあるかどうかを判断します。タブまたは改行ではなく、スペースで表示される可能性のある類似のものであるかどうかを確認します(選択クエリを使用して置換の効果を確認します)。 2つのフィールドの大文字小文字が同じ場合。 – Shadow

答えて

0

UPDATEのデータは正常に動作します。おそらく空白スペースは実際には空白ではなく、something elseとなります。

通常のSPACEの後では、次に最も一般的な空白(改行ではない)はCHARACTER TABULATION(すなわち水平タブ)とNO-BREAK SPACEです。それぞれCHAR(9)CHAR(160)を使用して、クエリで参照することができます。

また、テーブルビューアアプリケーションで改行が簡潔に表示される可能性があります。スペースを交換するとタブとnbspだけでは不十分な場合は、それらも置き換えてください。

本当にはすべての空白文字を置き換える必要があります...残念ながら、MySQLで使用する「空白のワイルドカード」はありません。技術的には、モンスターREPLACE(REPLACE(REPLACE(REPLACE… -callを作ることができます。最終的に、すべての空白文字を''に置き換えます。たとえば、すべてのTHREE-PER-EM SPACEを置き換えるには、まずUnicodeコードポイント(U+2004)を探します。次に、その発生コードを置き換えます。 :
REPLACE(PostCode, CHAR(0x2004 using ucs2), '')

これにハックショートカットがあります:あなたは、あなたのデータは唯一のLatin-1文字を含める必要があることを確信していないと何も?(疑問符)場合には、最初に置き換えLATIN1、として文字列をCONVERT()ことができすべて?ようなコードをオーバーフローして文字や''としてすべて?を置き換える:
REPLACE(CONVERT(PostCode using latin1), '?', '')
これは、1つのオフ、マニュアルのクエリに有用であることが、使用を継続するために、よりよい明示的に文字を置き換えることができます。


しかし、最初あなたはとても将来のレコードは、このような混乱はありません、/バリ消毒ご入力されたデータを確認する必要があります。可能であれば、結合クエリを実行しようとする前に、一括置換を実行してPostCode列のデータを正規化することを検討することもできます。従来のデータを持つレガシーシステムget worse over time

関連する問題