Условное сопоставление и замена - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь заменить заголовки из названия, которое отображается ниже. Но они не всегда имеют одинаковый формат.

Пример данных

AndrewMr
Simon Dr
AnjelaMiss
Robert

У меня есть список заголовков в отдельной временной таблице

create table #T(Title varchar(10))
insert into #T
values ('Mr'),('Mrs'),('Ms'),('Miss'),('Mstr'),('Master'),('Dr'),('Captain'),('Hon'),('Prof'),('Lady'),
        ('Lord'),('Sir'),('Rev') 

Что я Попытка сделать это - удалить все совпадающие заголовки, встречающиеся в именах

Удалось связать его, но не уверен, как выполнить замену

select  R.[First Name], right(R.[First Name],7), T.Title
from Temp R
     left outer join #T T on right(R.[First Name],7) like '%'+ t.Title + '%'

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Во всех ваших примерах совпадение только в конце. Итак:

select R.[First Name],
       coalesce(rtrim(left(R.[First Name],
                           len(R.[First Name]) - len(t.Title)
                          )
                     ),
                R.[First Name]
               )
from Temp R left join
      #T T
      on R.[First Name] like '%' + t.Title;

Здесь - это дб <> скрипка.

0 голосов
/ 15 апреля 2020

Надеюсь, что этот код хорошо работает для вашего случая:

SELECT *, ЗАМЕНА (T1.NAME, T2.TITLE, '') ИЗ @TAB T1 ВЛЕВО СОЕДИНИТЬСЯ #T T2 НА T1.NAME LIKE '% '+ ЗАМЕНА (T2.TITLE, T1.NAME,' ') +' % '

...