0

私は汚れたデータベースを持っており、最初に住所から都市名を抽出し(いくつかのバリエーションで書かれています)、都市名のスペルを標準化し、すべてのデータを標準化された都市名に置き換えることにより、それをきれいにする必要があります

Cities_look up テーブルを作成しました。可能なすべての都市名のバリエーションが書かれているこのテーブルには、たとえば2つの列があります

Standard_City_Name  Dirty_City Name
NEW YORK             NEW
NEW YORK             NY
NEW YORK             newyork
NEW YORK             New york
NEW YORK             ny
NEW YORK             NWYK

今度は、このテーブルを検索して、Dirty_City_Name 列のすべての値を比較し、それをトリミングして、住所から都市名をトリミングする必要があります。次に、都市の新しい列を作成し、そこにStandard_City_Nameを書き込みます

私はこれをやっています

SELECT TRIM(TRIM(TRAILING Cities_lookup.Dirty_City_Name FROM Address) ), Cities_lookup.Dirty_City_Name
from Student left join Cities_lookup 
 on Student.Address like CONCAT('% ',Cities_lookup.Dirty_City_Name)

誰でも助けることができますか?

4

1 に答える 1

2

アドレスが文字列の末尾にあることがわかっているので、トリックを使用してstuff(). つまり、それらの位置の文字を空の文字列に置き換えるだけです。

これを行う最も簡単な方法は、文字列を逆にし、最初の +1 文字を置き換えて、もう一度逆にすることです。この場合、 はダーティな都市名の長さで、「+ 1」はスペースです。

select reverse(stuff(reverse(Address), 1, len(cl.Dirty_City_Name) + 1, '')), cl.Standard_City_Name
from Student s left join
     Cities_lookup cl
     on s.Address like '% '+cl.Dirty_City_Name
于 2012-12-11T18:59:23.607 に答える