我有以下选择,可以将名称从Lastname, Firstname
格式转换为Firstname Lastname
格式。似乎在名字和姓氏之间添加了多余的空格
SELECT substring(D.NAME, charindex(',', replace(D.NAME, ' ', '')) + 1, len(D.NAME))
+ ' '
+ left(D.NAME, charindex(',', D.NAME) -1) AS First_Last
FROM TEST_TABLE D
以下是我现在得到的输出示例:
Johnnyyy Smithsonnn
Kimmey Test1
Denise Stuffing
所需格式(名字和姓氏之间的空格)
Johnnyyy Smithsonnn
Kimmey Test1
Denise Stuffing
答案 0 :(得分:3)
我倾向于喜欢这种技术。在此示例中,我们使用了一种罕见的†‡
替换模式,但是您可以使用<>
和><
注意:外部ltrim(rtrim( ... ))
是可选的,我将其保留为“以防万一”。
示例
Select NewValue = ltrim(rtrim(replace(replace(replace([Name],' ','†‡'),'‡†',''),'†‡',' ')))
From YourTable
返回
NewValue
Johnnyyy Smithsonnn
Kimmey Test1
Denise Stuffing
答案 1 :(得分:2)
也许名称中包含,
或不包含,
后的空格,或其他不一致的地方。
无论如何,您可以在连接前使用ltrim(rtrim())
:
select
case
when d.name like '%,%' then
ltrim(rtrim(substring(d.name, charindex(',', name) + 1, len(d.name))))
+ ' ' +
ltrim(rtrim(left(D.NAME, charindex(',', d.name) -1)))
when d.name like '% %' then
ltrim(rtrim(substring(d.name, charindex(' ', name) + 1, len(d.name))))
+ ' ' +
ltrim(rtrim(left(D.NAME, charindex(' ', d.name) -1)))
else ltrim(rtrim(d.name))
end AS First_Last
答案 2 :(得分:0)
尝试:
select ltrim(rtrim(left(D.NAME, charindex(',', D.NAME, 0) - 1)))
+ ' '
+ ltrim(rtrim(right(D.NAME, len(D.NAME) - charindex(',', D.NAME, 0))))
from TEST_TABLE D
这适用于我在下面使用的一些测试数据:
insert into #Test ([Name]) values ('Johnnyyy, Smithsonnn')
insert into #Test ([Name]) values ('Kimmey, Test1')
insert into #Test ([Name]) values ('Denise, Stuffing')
给出预期的结果:
Johnnyyy Smithsonnn
Kimmey Test1
Denise Stuffing
答案 3 :(得分:0)
我认为您打算在提取名称后替换 空格。所以:
SELECT (replace(left(D.NAME, charindex(',', D.NAME + ',') + 1), ' ', '') +
' ' +
left(D.NAME, charindex(',', D.NAME + ',') - 1)
) AS First_Last
FROM TEST_TABLE D;
这还会为charindex()
添加一个逗号,因此逗号是可选的。