【问题标题】:sql - split first and last namesql - 拆分名字和姓氏
【发布时间】:2017-12-20 18:01:12
【问题描述】:

我需要将所有名字分成名字和姓氏。

我的名字在同一列,名字有几个词。 例如

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 中做到这一点

提前感谢

【问题讨论】:

  • 到目前为止你有什么尝试????
  • 提示:左、CHARINDEX、反向

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


【解决方案1】:

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

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

【讨论】:

  • 如果有单个单词(没有任何空格)或 NULL 值,我们可能需要进行一些检查: SELECT IIF(charindex(' ', @your_col) > 0, LEFT(@your_col, CHARINDEX (' ', @your_col) - 1), @your_col), IIF(charindex(' ', @your_col) > 0, RIGHT(@your_col, CHARINDEX (' ' ,REVERSE(@your_col))-1), NULL)从你的表
  • 感谢您的帮助!我需要对此查询工作进行一些调整! rtrim 到现场
【解决方案2】:

您可以执行以下操作。

空格分隔符之前的第一个分割字符串

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

【讨论】:

    【解决方案3】:

    以防万一其他人看到这个并需要 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,
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多