从字符串中修剪查找表中的数据

时间:2012-12-11 18:20:51

标签: sql trim lookup-tables city

我有一个Dirty数据库,我必须清理它,首先从地址中提取城市名称(用几种变体编写)然后标准化拼写城市名称并用标准化城市名称替换所有数据

我制作了一张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 :(得分: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