none
Separar ultimo sobrenome. RRS feed

  • Pergunta

  • Boa tarde, 

    Preciso de um help dos amigos!

    Tenho uma tabela chamada CADASTRO e nela tem um campo chamado NOME.

    No campo nome, tenho o cadastro no nome completo da pessoa. Ela pode ter 3, 4, 5, e até 6 nomes.

    O que preciso é separar somente o ultimo nome dos restantes. Alguém pode ajudar?

    Desde já agradeço

    sexta-feira, 30 de outubro de 2015 14:34

Respostas

  • Desculpe.. nao vi que voce queria uma soluçao dentro do SQL.. aqui esta a query:

    select reverse(substring(reverse(a),1, charindex(' ', reverse(a)) -1)) as LastWord
    from 
    (
    select 'Pedro de Alcântara João Carlos Leopoldo Salvador Bibiano Francisco Xavier de Paula Leocádio Miguel Gabriel Rafael Gonzaga'  as a union all
    select 'Pedro de Alcantara Francisco António João Carlos Xavier de Paula Miguel Rafael Joaquim José Gonzaga Pascoal Cipriano Serafim de Bragança e Bourbon' ) as tbl
    

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Marcos SJ sexta-feira, 30 de outubro de 2015 17:51
    sexta-feira, 30 de outubro de 2015 15:23
  • Daniel,

    Veja se isso te resolve... Mas atente-se para o aviso do William..

    DECLARE @Nome varchar(50) = 'Logan Destefani Merazzi'
    select @nome = reverse(@Nome)
    select reverse(substring(@Nome,1,charindex(' ',@nome,1)-1))

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    • Sugerido como Resposta SimorC sexta-feira, 30 de outubro de 2015 16:29
    • Marcado como Resposta Marcos SJ sexta-feira, 30 de outubro de 2015 17:51
    sexta-feira, 30 de outubro de 2015 15:32
  • Boa tarde,

    Daniel, segue mais uma sugestão para teste:

    declare @Nome varchar(100) = 'Daniel Iniciante SQL';
    select RIGHT(@Nome, CHARINDEX(' ', REVERSE(@Nome)) - 1)

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta SimorC sexta-feira, 30 de outubro de 2015 16:29
    • Marcado como Resposta Marcos SJ sexta-feira, 30 de outubro de 2015 17:51
    sexta-feira, 30 de outubro de 2015 15:57

Todas as Respostas

  • Cuidado! Podem existir exceçoes. Por exemplo, se o fulano se chama Pedro de Alcantara Junior ou André da Silva Filho, ou André da Silva Neto, os sobrenomes nestes casos nao sao Junior, Filho e Neto..

    Ou voce cria uma logica bem fechada para excluir as excessoes ou voce separa no seu formulario Nome de Sobrenome.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    sexta-feira, 30 de outubro de 2015 14:40
  • Obrigado pela lembrança, William!

    Primeiro quero fazer essa separação simples, sem fazer essa identificação... em um segundo momento irei para este passo.

    Já fiz algo parecido utilizando o PATINDEX, só que neste caso eu gostaria de saber o primeiro nome.

    Se houvesse uma forma de realizar um "PATINDEX de trás pra frente" eu conseguiria, mas não tenho este conhecimento.

    Desde já agradeço o auxílio.

    sexta-feira, 30 de outubro de 2015 14:49
  • Para isso use essa instruçao:

    string nomeCompleto="Pedro de Alcântara João Carlos Leopoldo Salvador Bibiano Francisco Xavier de Paula Leocádio Miguel Gabriel Rafael Gonzaga";
    
    string ultimoSobrenome= nomeCompleto.Split(' ').Last();

    Isso vai funcionar se voce usar espaços para separar os nomes

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 30 de outubro de 2015 15:13
  • Desculpe.. nao vi que voce queria uma soluçao dentro do SQL.. aqui esta a query:

    select reverse(substring(reverse(a),1, charindex(' ', reverse(a)) -1)) as LastWord
    from 
    (
    select 'Pedro de Alcântara João Carlos Leopoldo Salvador Bibiano Francisco Xavier de Paula Leocádio Miguel Gabriel Rafael Gonzaga'  as a union all
    select 'Pedro de Alcantara Francisco António João Carlos Xavier de Paula Miguel Rafael Joaquim José Gonzaga Pascoal Cipriano Serafim de Bragança e Bourbon' ) as tbl
    

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Marcos SJ sexta-feira, 30 de outubro de 2015 17:51
    sexta-feira, 30 de outubro de 2015 15:23
  • Daniel,

    Veja se isso te resolve... Mas atente-se para o aviso do William..

    DECLARE @Nome varchar(50) = 'Logan Destefani Merazzi'
    select @nome = reverse(@Nome)
    select reverse(substring(@Nome,1,charindex(' ',@nome,1)-1))

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    • Sugerido como Resposta SimorC sexta-feira, 30 de outubro de 2015 16:29
    • Marcado como Resposta Marcos SJ sexta-feira, 30 de outubro de 2015 17:51
    sexta-feira, 30 de outubro de 2015 15:32
  • Boa tarde,

    Daniel, segue mais uma sugestão para teste:

    declare @Nome varchar(100) = 'Daniel Iniciante SQL';
    select RIGHT(@Nome, CHARINDEX(' ', REVERSE(@Nome)) - 1)

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta SimorC sexta-feira, 30 de outubro de 2015 16:29
    • Marcado como Resposta Marcos SJ sexta-feira, 30 de outubro de 2015 17:51
    sexta-feira, 30 de outubro de 2015 15:57