0

我们正在使用 SQL Server 2016。

我有一个名为 TrainerName 的列,其中包含“Bob Smith”。我想执行一个 SELECT 查询,该查询将返回该列,看起来像“Smith,Bob”。如何使用 SELECT 语句执行此操作?

一个小警告是,该列可能包含“Mary Jane Smith”,我需要将其显示为“Smith, Mary Jane”。

感谢您对此的任何帮助。

4

1 回答 1

1

我希望您这样做是为了将数据正确地存储到名字和姓氏的不同列中。在这种情况下,这可能是一个很好的第一步,因为当您返回并手动清理不符合您期望的名称时,您需要进行的更改更少。如果这不是您的目的,那么每当您提出涉及名称的要求时,您都会感到头疼。

假设这是您的目的,然后找到最后一个空格的位置,使用它拆分名字和姓氏,然后重新组合。

以下是一些示例数据:

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

请注意,错误的余地不大。如果姓氏中有空格,则需要更复杂的逻辑。

于 2020-03-06T17:11:30.403 回答