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

Sql 从字符串中修剪查找表中的数据,sql,trim,lookup-tables,city,Sql,Trim,Lookup Tables,City,我有一个脏数据库,我必须清理它,首先从地址中提取城市名称(写有几个变体),然后对城市名称的拼写进行标准化,并用标准化城市名称替换所有数据 我做了一张查表。其中写入了所有可能的城市名称变体 此表有两列 比如说 Standard_City_Name Dirty_City Name NEW YORK NEW NEW YORK NY NEW YORK newyork NEW YORK New york NE

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

我做了一张查表。其中写入了所有可能的城市名称变体 此表有两列 比如说

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\u city\u 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)

有人能帮忙吗?

因为你知道地址在字符串的末尾,你可以使用一个技巧通过
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

您使用的是什么数据库?@Eugene Visual studio 2012 sql Server使用C#或VB而不是sql更容易、更清晰地完成此操作。它的给定错误“无法绑定多部分标识符”cl.Standard_City_Name。“我修复了别名。”。它是“sl”而不是“cl”。它的给定错误sying:S'CONCAT'不是可识别的内置函数名。@ShanzaButt。这是在您的原始SQL中。您熟悉SQL Server吗?它(历史上)没有
concat1
函数。@ShanzaButt。
from
语句为表格提供了较短的别名<代码>学生被称为
s
Cities\u查找
cl
。较短的别名使读写查询更容易。