如何格式化来自 SQL 服务器 SELECT 查询的简单字符串输出
How To Format Simple String Output From SQL Server SELECT Query
我们正在使用 SQL Server 2016。
我有一个名为 TrainerName 的列,其中包含 "Bob Smith"。我想执行 SELECT 查询,使此列 return 看起来像 "Smith, Bob"。如何使用 SELECT 语句执行此操作?
一个小警告是该列可能包含 "Mary Jane Smith",我需要将其显示为 "Smith, Mary Jane"。
感谢您对此的任何帮助。
我希望您这样做是为了将数据正确地存储到名字和姓氏的不同列中。在这种情况下,这可能是一个很好的第一步,因为当您返回并手动清理不符合您期望的名称时,您需要进行的更改更少。如果这不是您的目的,那么每当您遇到涉及名称的需求时,您都会很头疼。
假设这是你的目的,那么找到最后一个 space 的位置,用它把名字和姓氏分开,然后重新组合。
下面是一些示例数据:
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
请注意,没有太多出错的余地。如果姓氏中有space,则需要更复杂的逻辑。
我们正在使用 SQL Server 2016。
我有一个名为 TrainerName 的列,其中包含 "Bob Smith"。我想执行 SELECT 查询,使此列 return 看起来像 "Smith, Bob"。如何使用 SELECT 语句执行此操作?
一个小警告是该列可能包含 "Mary Jane Smith",我需要将其显示为 "Smith, Mary Jane"。
感谢您对此的任何帮助。
我希望您这样做是为了将数据正确地存储到名字和姓氏的不同列中。在这种情况下,这可能是一个很好的第一步,因为当您返回并手动清理不符合您期望的名称时,您需要进行的更改更少。如果这不是您的目的,那么每当您遇到涉及名称的需求时,您都会很头疼。
假设这是你的目的,那么找到最后一个 space 的位置,用它把名字和姓氏分开,然后重新组合。
下面是一些示例数据:
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
请注意,没有太多出错的余地。如果姓氏中有space,则需要更复杂的逻辑。