2012-12-11 21 views
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) 

谁能帮助?

+1

您使用了哪个数据库? –

+0

@Eugene Visual studio 2012 sql server – ssbb

+0

这将在C#或VB中更简单,干净地完成,而不是SQL。 –

回答

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 
+0

其提供错误“多部分标识符”cl.Standard_City_Name“无法绑定。” – ssbb

+1

我修正了别名。这是“sl”而不是“cl”。 –

+0

它给出错误sying:S 'CONCAT'不是一个公认的内置函数名称。 – ssbb