sql - 拆分名字和姓氏

时间:2017-12-20 18:01:13

标签: sql sql-server split sql-server-2016

我需要将所有名字分成第一个和最后一个。

我在同一列中有名称,名称有几个单词。 例如

table1

Nome
____________________________________
Abel da Silva Barros                                   
Abel da Silva Dias                                     
Abilio Rodrigo Garcia da Silva Costa                   
Adelino David Oliveira Silva                           
Ademar Adolfo Lopes Gomes                              
Adriano Leonel Fernandes Castro Goncalves              
Agostinho Alberto Pereira Duarte                       
Agostinho Fernando Nogueira Pereira                    
Aires Manuel Oliveira da Costa                         
Alberto Costa                                          
Alberto Sergio Oliveira Dias Silva                     
Albino Mouta de Sousa                                  
Alfredo de Sousa Barreto                               
Alfredo Guilherme Gonçalves Cerqueira                  
Alfredo Magalhães Queiros                              
Alfredo Miguel Pereira Goncalves Vieira da Silva  

我需要像这样的输出,只有拳头和姓氏!

Abel Barros
Abel Dias
Abilio Costa
Adelino Silva
Ademar Gomes
Adriano Gonçalves
Agostinho Duarte
...

我如何在MS SQL 2016中执行此操作

先谢谢

3 个答案:

答案 0 :(得分:4)

您可以尝试使用left,right和charindex

 SELECT LEFT(your_col, charindex(' ', your_col) - 1) , 
       RIGHT(your_col, CHARINDEX (' ' ,REVERSE(your_col))-1)
from your_table

答案 1 :(得分:1)

您可以执行以下操作。

首先在空格分隔符之前拆分字符串

SUBSTRING(Nome, 0, CHARINDEX(' ', Nome))

然后在最后一次出现时拆分字符串

SUBSTRING( Nome , LEN(Nome) -  CHARINDEX(' ',REVERSE(Nome)) + 2  , LEN(Nome))

使用以下+ ' ' +

连接
SELECT SUBSTRING(Nome, 0, CHARINDEX(' ', Nome)) + ' ' +
SUBSTRING( Nome , LEN(Nome) -  CHARINDEX(' ',REVERSE(Nome)) + 2  , LEN(Nome)  )
FROM table1;

在此测试:http://sqlfiddle.com/#!6/f54391/1

答案 2 :(得分:0)

以防其他人看到此内容并需要SQL Server 2008(或更早版本)。

您可以修改scaisEdge中的答案以处理单个单词名称,而无需使用IIF (introduced in SQL Server 2012)

在查找名字时,只需在名称后面添加一个空格,在查找姓氏时在名称前添加一个空格。 将co.Name替换为您的实际列名。

LEFT(co.Name, charindex(' ', co.Name+' ') - 1) firstname, 
RIGHT(co.Name, CHARINDEX (' ' ,REVERSE(' ' + co.Name))-1) lastname,