none
Comando SQL para buscar primeiro nome e último sobrenome RRS feed

  • Pergunta

  • Bom dia, 

    Preciso de uma sentença SQL para buscar o primeiro e último sobrenome. To tentando usar essa:

    SELECT 
    SUBSTRING(nome, 1, CHARINDEX(' ', nome) - 1) AS [FirstName],
    SUBSTRING(NOME, CHARINDEX(' ', NOME) + 1, LEN(NOME)) AS [LastName]
    FROM PPESSOA

    Porém, sem sucesso. Alguém pode me ajudar?

    Abs.,

    Eduardo


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 9 de maio de 2013 13:31

Respostas

  • Eduardo,

    Tente este comando:

    SELECT
    SUBSTRING(NOME, 0, CHARINDEX(' ', NOME)) As Nome,
    REVERSE(SUBSTRING(REVERSE(NOME), 0, CHARINDEX(' ', REVERSE(NOME)))) As Sobrenome
    FROM PPESSOA


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta Eduardo_Amaral quinta-feira, 9 de maio de 2013 17:28
    quinta-feira, 9 de maio de 2013 16:41
    Moderador

Todas as Respostas

  • Eduardo,

    Segue um exemplo de implementação:

    DECLARE @Var VARCHAR(100)
    SET @Var = 'Fabrizzio Antoniaci Caputo'
    
    SELECT
    SUBSTRING(@Var, 0, CHARINDEX(' ', @Var)) As Nome,
    REVERSE(SUBSTRING(REVERSE(@Var), 0, CHARINDEX(' ', REVERSE(@Var)))) As Sobrenome


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 9 de maio de 2013 14:19
    Moderador
  • Obrigado, Fabrizzio!

    Porém dessa forma não me atende, porque não posso declarar uma variável. Existe outra forma?

    Abraço! Muito obrigado!

    Eduardo Amaral


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 9 de maio de 2013 16:21
  • Eduardo,

    A variavel foi apenas no exemplo, basta no lugar da variavel colocar o seu campo e adicionar um from tabela na query.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 9 de maio de 2013 16:22
    Moderador
  • Apesar do Fabrício já ter respondido,

    segue mais um exemplo se necessário.

    --declarando uma tabela temporária
    DECLARE @t TABLE (Nome Varchar(30))
    
    -- populando a tabela
    INSERT @t
    SELECT 'MARISTELA ANTONIA DA SILVA' UNION
    SELECT 'SONIA MARIA DE MELLO'       UNION
    SELECT 'JORGE CARLOS AROLDO'        UNION
    SELECT 'CLEIDE NASCIMENTO DE MATOS' UNION
    SELECT 'LUIZ ANTONIO DA SILVA'      UNION
    SELECT 'SANDRA'   
    
    -- exibindo o resultado
    SELECT 
        Nome, 
        [Primeiro Nome] = SUBSTRING(Nome,1,(CHARINDEX(' ',Nome+' '))),
        [Primeiro Nome e Sobrenome] = SUBSTRING(Nome,1,(CHARINDEX(' ',Nome+' ', CHARINDEX(' ',Nome) + 1))),
        [Primeiro Nome e Ultimo Sobrenome] = SUBSTRING(Nome,1,CHARINDEX(' ',Nome+' ') - 1) 
    										+RIGHT(Nome,CHARINDEX(' ',REVERSE(Nome)))
    FROM @t 


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    quinta-feira, 9 de maio de 2013 16:29
  • Fabrizzio, veja o que tentei e não funcionou. Usei a mesma sentença que você enviou. Me dá mais uma forma ai por favor. Obrigado!

    DECLARE @Var VARCHAR(100)
    SET @Var = (SELECT NOME FROM PPESSOA)

    SELECT
    SUBSTRING(@Var, 0, CHARINDEX(' ', @Var)) As Nome,
    REVERSE(SUBSTRING(REVERSE(@Var), 0, CHARINDEX(' ', REVERSE(@Var)))) As Sobrenome

    Erro:

    Mensagem 512, Nível 16, Estado 1, Linha 22
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

    (1 linha(s) afetadas)


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 9 de maio de 2013 16:35
  • Eduardo,

    Tente este comando:

    SELECT
    SUBSTRING(NOME, 0, CHARINDEX(' ', NOME)) As Nome,
    REVERSE(SUBSTRING(REVERSE(NOME), 0, CHARINDEX(' ', REVERSE(NOME)))) As Sobrenome
    FROM PPESSOA


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta Eduardo_Amaral quinta-feira, 9 de maio de 2013 17:28
    quinta-feira, 9 de maio de 2013 16:41
    Moderador
  • Fabrizzio, veja o que tentei e não funcionou. Usei a mesma sentença que você enviou. Me dá mais uma forma ai por favor. Obrigado!

    DECLARE @Var VARCHAR(100)
    SET @Var = (SELECT NOME FROM PPESSOA)

    SELECT
    SUBSTRING(@Var, 0, CHARINDEX(' ', @Var)) As Nome,
    REVERSE(SUBSTRING(REVERSE(@Var), 0, CHARINDEX(' ', REVERSE(@Var)))) As Sobrenome

    Erro:

    Mensagem 512, Nível 16, Estado 1, Linha 22
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

    (1 linha(s) afetadas)


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    Eduardo,

    Usar

    DECLARE @Var VARCHAR(100)
    SET @Var = (SELECT NOME FROM PPESSOA)

    com uma tabela que tem mais de uma linha sempre vai retornar este erro... afinal vc retorna varios nomes para uma unica variavel e isso ta errado...

    tente algo assim:

    DECLARE @Var VARCHAR(100)
    SET @Var = (SELECT NOME FROM PPESSOA WHERE CODIGO = 1)


    (Se a isto ajudou a resolver o problema, por favor, marque como resposta)

    quinta-feira, 9 de maio de 2013 16:43
  • Fábio, 

    dessa forma funciona, porém não me atende porque preciso de buscar todos os professores da minha base (aprox. 350).

    Att.,

    Eduardo


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 9 de maio de 2013 16:51
  • Opa, certíssimo, Fabriizio. Muito obrigado!

    Funcionou perfeitamente. Esse fórum e profissionais como você fazem a diferença nesse canal de comunicação e suporte.

    Abs.,

    Eduardo


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 9 de maio de 2013 17:28