Как отформатировать простой вывод строки из SQL запроса SELECT сервера - PullRequest
0 голосов
/ 06 марта 2020

Мы используем SQL Server 2016.

У меня есть столбец с именем TrainerName, который содержит «Bob Smith». Я хотел бы выполнить запрос SELECT, который бы возвращал этот столбец в виде «Смит, Боб». Как я могу сделать это с помощью оператора SELECT?

Одно небольшое предостережение в том, что в столбце может быть написано «Мэри Джейн Смит», и мне нужно, чтобы это прозвучало как «Смит, Мэри Джейн».

Спасибо за любую помощь в этом.

1 Ответ

1 голос
/ 06 марта 2020

Я надеюсь, что вы делаете это, чтобы правильно хранить данные в разных столбцах для имени и фамилии. В этом случае это может быть хорошим первым шагом, так как вам нужно меньше изменений, когда вы вернетесь назад 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.

...