修剪列内的多余空白

时间:2019-04-22 16:09:38

标签: sql sql-server sql-server-2014

我有以下选择,可以将名称从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

4 个答案:

答案 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()添加一个逗号,因此逗号是可选的。