@dmarkez昨天问了一个问题,就在我点击Post Your Answer
按钮之前,他删除了这个问题。我认为答案值得分享......他没有重新发布这个问题,所以我希望他不介意我重新发帖,以便我可以与其他尝试类似事情的人分享答案:
MS SQL函数来操作字符串
我需要一个MS SQL函数,需要用前缀确定名称,然后将其与实际名称结合起来。
实现这一目标的最佳方法或功能是什么?
前缀名称:Te,De,Van,Dela,O,Mc,San,Los等......
示例输入/输出名称:
van dam te mora te-> vandam temora te
o mara dela cruz -> omara delacruz
mc arthur white o san miguel -> mcarthur white osanmiguel
moana te aro van dolf-> moana tearo vandolf
答案 0 :(得分:0)
如果你把所有的搜索和&替换一个表中的值,然后您可以编写几行SQL来循环使用S& R值来修复名称。向prefix
表添加更多S& R对很容易,因此您的S& R例程是动态的:
declare @prefix table (srch varchar(255), rplc varchar(255))
declare @names table (name varchar(255))
insert into @prefix
values ('te ', 'te'), ('de ', 'de'), ('van ', 'van'), ('dela ', 'dela'), ('san ', 'san'), ('o ', 'o'), ('mc ', 'mc'), ('los ', 'los')
insert into @names
values ('van dam te mora te'), ('o mara dela cruz'), ('mc arthur white o san miguel'), ('moana te aro van dolf')
while (1=1)
begin
update n
set n.name = replace(n.name, p.srch, p.rplc)
from @names n,
@prefix p
where (n.name like p.srch + '%') or (n.name like '% ' + p.srch + '%')
if @@rowcount = 0
break
end
select * from @names
请注意('san ', 'san')
位于前缀表中的('o ', 'o')
之前。这是因为在san
之前必须替换o
,或osanmiguel
将osan miguel
保留{{1}}。因此,S& R的顺序很重要。您需要在前缀表中添加聚集索引,以正确排序S& R记录,以便S& R循环首先处理子前缀。