2015-12-04 3 views
2

Я пытаюсь устранить инициалов всякий раз, когда я встречаю их в таблице:Устранение инициалов от имени строки

Например, если у меня есть Джон D Doe, я хочу, чтобы мой запрос, возвращающий John Doe. Вот мой запрос.

declare @Name varchar(100); 

select @Name = 'James D Doe'; 

select left(@Name, len(@Name)-charindex(' ', @Name,0))+' '+right(@Name, charindex(' ', @Name,0)); 

В настоящее время мой запрос возвращает полную строку. Как отключить инициалы среднего уровня, когда я сталкиваюсь с ними? Мой желаемый результат - Джеймс Доу.

+2

насчет названия, как «Чарли Van Der Wonder»? Это одна из причин, по которой модели данных часто имеют несколько столбцов (первое имя, например, фамильное имя) –

+0

А также у меня есть член семьи с несколькими инициалами формы «Jon DC Doe», которая иногда написана «Jon DC Doe» или «Jon Doe» III »- есть и другие случаи, которые следует учитывать. –

+0

@MarkSchultheiss: Я действительно понимаю это, но я хотел бы получить и ответить на этот конкретный вопрос. Спасибо –

ответ

1

Это должно работать для вашего конкретного случая использования, где у вас есть только один отчество (или инициалы):

SELECT CASE WHEN LEN(REPLACE(@Name, ' ', '')) = LEN(@Name) - 2 
THEN 
    CONCAT(SUBSTRING(@Name, 1, CHARINDEX(' ', @Name, 0)), 
      SUBSTRING(@Name, 
        CHARINDEX(' ', @Name, CHARINDEX(' ', @Name, 0) + 1) + 1, 
        LEN(@Name) - CHARINDEX(' ', @Name, CHARINDEX(' ', @Name, 0) + 1)), 
ELSE @Name 
END 
Смежные вопросы