在SQL中简单替换

时间:2014-04-09 18:58:05

标签: sql sql-server-2008 street-address

我正在尝试更新查询以更正街道地址缩写。我想纠正像123 Main Cr这样的123 Main Cir。但是,我不希望它弄乱像123 Creek Cir这样的地址,并且我希望它能够抓住123 Main Cr Apt 28.这就是我到目前为止所拥有的。这是使用SQL Server 2008。

UPDATE AddressTable
SET AD = replace(AD, 'Cr', 'Cir')
WHERE right(ad,3) like '% cr%'

提前谢谢。

4 个答案:

答案 0 :(得分:0)

试试这个,并相应地更新你的UPDATE语句。我相信你要问的是你要确保用“单词边界”代替:

参考:

  

Oracle REGEXP_LIKE and word boundaries

测试1:

SELECT REGEXP_REPLACE ( '123 Creek Cr' , '(^|\s)Cr(\s|$)' , ' Cir' ) AS output_txt
FROM dual;

的Test2:

SELECT REGEXP_REPLACE ( '123 Main Cr' , '(^|\s)Cr(\s|$)' , ' Cir' ) AS output_txt
FROM dual;

答案 1 :(得分:0)

听起来你正在寻找standardize addresses,正确的缩写,拼写等等。解析和标准化地址是一个非常复杂的问题。当然,有许多因素会影响地址的形成,而RegEx无法处理所有地址解析,因为地址不是常规的。例如,如果您有此地址:

100 Main St Helena CA
该人的意思是

100 Main Street, Helena, CA?

或者是

100 Main [street], St. Helena, CA?

这显然是一个相当简单的示例,但您可以看到SQL函数如何很难解析用户对地址输入的意图。找出标准化地址的所有因素,变化和规则可能是一项艰巨的任务。因此,我建议您考虑使用专门从事地址标准化的服务。利用这样的服务可以使您的任务变得更加容易。

SmartyStreets这样的公司经历了所有令人头痛的问题,并且无法确定地址的格式,并将返回标准化的地址输出,以便您更新数据库。 SmartyStreets专注于美国邮政地址,但也有其他公司也在做国际地址。以下是一些确实涉及标准化的公司:

这些和许多其他服务可以更快地处理清理地址数据的任务,而不是考虑到标准化地址所涉及的所有因素和变化。

答案 2 :(得分:0)

以下查询可能适合您:

UPDATE AddressTable
SET AD = 
    (CASE SUBSTRING(AD, LEN(AD)-1, 2)
      WHEN 'Cr' THEN replace(LEFT(AD, LEN(AD)-2) + 'Cir', ' Cr ', ' Cir ')
      ELSE replace(AD, ' Cr ', ' Cir ')
    END)
WHERE AD like '% Cr'
OR    AD like '% Cr %'

答案 3 :(得分:0)

您可以在字符串后附加一个空格并按以下方式过滤结果:

WHERE ad + ' ' LIKE '% Cr %'

同样,您可以在字符串中附加一个空格,并将所有' Cr '替换为' Cir '

REPLACE(ad + ' ', ' Cr ', ' Cir ')

他们只修剪尾随空格。所以,最终结果如下:

UPDATE AddressTable
SET AD = RTRIM(REPLACE(AD + ' ', ' Cr ', ' Cir '))
WHERE AD + ' ' LIKE '% Cr %'
;