根据表值查找/替换字符串值

时间:2018-03-22 00:29:32

标签: sql-server string tsql replace

我有点不寻常需要从单独的表中的值中查找/替换字符串中的值。

基本上,我需要标准化一堆地址,其中一个步骤是用Street,Road或Boulevard替换St,Rd或Blvd之类的东西。我打算用一堆嵌套的REPLACE()语句编写一个函数,但这是1)低效的; 2)不实用。根据USPS网站,街道类型有500多种可能的缩写。

我想做的事情类似于:

REPLACE(Address1,Col1,Col2)其中col1和col2是单独表格中的缩写和完整街道类型。

任何人都对这样的事情有任何见解吗?

1 个答案:

答案 0 :(得分:0)

您可以使用递归CTE进行此类替换。像这样:

with r as (
      select t.*, row_number() over (order by id) as seqnum
      from replacements
     ),
     cte as (
      select replace(t.address, r.col1, r.col2) as address, seqnum as i
      from t cross join
           r
      where r.seqnum = 1
      union all
      select replace(cte.address, r.col1, r.col2), i + 1
      from cte join
           r
           on r.i = cte.i + 1
     )
select cte.*
from (select cte.*, max(i) over () as maxi
      from cte
     ) cte
where maxi = i;

那就是说,这基本上是迭代。在每行有500个替换的表上执行此操作将非常昂贵。

SQL可能不是最好的工具。