Преобразование фамилии, среднего имени в разные столбцы в sql

В настоящее время у меня есть столбец с именем PersonFullName. В нем есть такие данные:

PERSONFULLNAME  
Doe, John A  
Doe, Jane M  
Doe, Eric

Я хочу получить данные в таком формате:

LastName  -  FirstName  -  MI  
DOE    -     John    -     A  
DOE    -     Jane    -     M  
Doe    -     Eric

Ниже отображается нормально, но если я добавлю средний инициал, средний инициал попадет в столбец «Имя».

declare @last as varchar(20)
declare @first as varchar(20)
declare @mid as varchar(20)

declare @name varchar(100)
select @name = 'Leake, Angela'

set @last = substring(@name, 1,charindex(', ',@name)-1)
set @first = LTRIM(substring(@name, charindex(' ',@name),len(@name)-charindex(' ',@name)+1))
set @mid = RIGHT(@name, CHARINDEX(' ', REVERSE(@name))-1)
If (@mid=@first) SET @mid=''

select @last as 'Last Name', @first as 'First Name',@mid as 'Middle Name'

Select PERSONFULLNAME FROM Kronos

person Albert Vincent    schedule 07.07.2016    source источник
comment
Можете ли вы показать нам, что вы пробовали до сих пор?   -  person Matt    schedule 07.07.2016
comment
Отметьте свой вопрос с помощью базы данных, которую вы используете, а также попыток, которые вы предприняли для решения проблемы.   -  person Gordon Linoff    schedule 07.07.2016
comment
Поможет ли этот ответ? Как разбить строку на столбцы для представления   -  person Okomikeruko    schedule 07.07.2016
comment
Действительно ли ваши данные настолько просты, или вам нужно учитывать дополнительные пробелы, суффиксы, точки, дефисы, апострофы и т. д., не говоря уже о нескольких культурах? Любой значительно большой список имен с произвольным текстом будет иметь исключения практически из любой логики, которую вы можете придумать.   -  person Tim Lehner    schedule 07.07.2016
comment
Я работаю, чтобы объединить 2 таблицы вместе, но 1 таблица отформатирована как PERSONFULLNAME, которая является стандартизированным вводом, а другая таблица отформатирована как LASTNAME FIRSTNAME MI, что не является стандартизированным вводом.   -  person Albert Vincent    schedule 07.07.2016
comment
@AlbertVincent Я был бы осторожен, присоединяясь к имени. Есть несколько Джозефов А. Смитов.   -  person Tim Lehner    schedule 07.07.2016
comment
@TimLehner Я знаю, и именно это меня напугало в этом проекте. Моя работа в основном заключается в том, чтобы связать вместе несколько разных баз данных и создать программное обеспечение для автоматического анализа данных по результатам. Я думал о том, чтобы иметь свободную форму базы данных, чтобы изменить способ ввода данных, но менеджер не хочет, чтобы его команда выполняла БОЛЬШЕ РАБОТЫ...   -  person Albert Vincent    schedule 07.07.2016


Ответы (1)


Да окомикеруко, что сработало. Я все еще изучаю SQL, поэтому я не знал об этом CTE.

Следующее сделало именно то, что мне нужно...

WITH CTE AS
(
    SELECT  PERSONFULLNAME,
            LEN(PERSONFULLNAME)-LEN(REPLACE(PERSONFULLNAME,' ','')) N
    FROM Kronos
)
SELECT  PERSONFULLNAME,
        PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N) 'First Name',
        PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N+1) 'Last Name',
        PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N-1) 'MI'
FROM CTE
person Albert Vincent    schedule 07.07.2016
comment
Это система хронометража Кронос? - person scsimon; 07.07.2016
comment
Хорошо, я играл в этой базе данных раньше и помню, что имя было разделено в таблице [PERSON]. Не уверен, как выглядит ваша среда, но мне было просто любопытно. - person scsimon; 07.07.2016
comment
У меня есть только связанный сервер с учетными данными для выполнения для SP, который они создали для меня. Из-за стандартов HR/Finance SOX это все, что мне разрешено видеть. Кроме того, данные были созданы в текущем формате около года назад. Существует несколько автоматизированных программ, построенных вокруг текущего форматирования. Итак, с новой системой, с которой у меня теперь есть связанный сервер, мне нужно создать собственное форматирование в моей базе данных, чтобы приспособиться. - person Albert Vincent; 07.07.2016
comment
Ах я вижу. Всегда тяжелее, когда тебе не дадут ключи от королевства. - person scsimon; 07.07.2016
comment
Я работаю над этим, лол. В настоящее время у меня есть ПОЧТИ КАЖДАЯ система на нашем сайте, связанная друг с другом в той или иной форме. Наша система инвентаря — это все, что осталось, лол. - person Albert Vincent; 07.07.2016