Я надеюсь, что вы делаете это, чтобы правильно хранить данные в разных столбцах для имени и фамилии. В этом случае это может быть хорошим первым шагом, так как вам нужно меньше изменений, когда вы вернетесь назад go и очистите имена, которые не соответствуют вашим ожиданиям. Если это не ваша цель, вы будете испытывать головную боль каждый раз, когда у вас появляется требование, которое включает имена.
Предполагая, что это ваша цель, затем найдите позицию этого последнего пробела, разделите первое имя из фамилии, используя его, а затем рекомбинируйте.
Вот несколько примеров данных:
declare @trainers table (trainer varchar(255));
insert @trainers values ('Bob Smith'), ('Mary Jane Smith');
А вот запрос, который разбивается по вашему желанию:
select t.trainer,
name = names.lastName + ', ' + names.firstName
from @trainers t
cross apply (select
value = len(trainer) - charindex(' ', reverse(trainer))
) lastSpace
cross apply (select
firstName = left(trainer, lastSpace.value),
lastName = substring(trainer, lastSpace.value + 2, len(trainer) - lastSpace.value)
) names
Обратите внимание, что не так много места для ошибок. Если в фамилии есть пробел, вам нужен еще более сложный лог c.