none
Query SQL 2000 - Separar nome RRS feed

  • Pergunta

  • Boa tarde, Galera

    Estou com um problema facil de se resolver, mas como sou iniciantes tenho dificuldade.
    Só preciso de uma query pra pegar o primeiro nome e o Ultimo por ex:

    Bruno Souza Andrade na query eu preciso pegar o Bruno Andrade..

    Agradeço ajuda..


    Obrigado!
    • Tipo Alterado Gustavo Maia Aguiar terça-feira, 9 de março de 2010 16:25 É uma pergunta e não uma discussão
    segunda-feira, 8 de março de 2010 20:56

Todas as Respostas

  • Boa tarde Bruno, segue exemplo:

    DECLARE @t TABLE (Nome Varchar(30))
    
    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 LOPES VIEIRA'   
    
    
    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
    segunda-feira, 8 de março de 2010 21:12
  • Boa Tarde,

    Segue uma forma alternativa de retornar o que você precisa (pena que só funciona no 2005):

    -- Criação da tabela
    CREATE TABLE Nomes (Nome VARCHAR(80)) 
    -- Inserção de registros
    INSERT INTO Nomes VALUES ('Bruno Souza Andrade')
    INSERT INTO Nomes VALUES ('Ana Paula Silveira')
    INSERT INTO Nomes VALUES ('Pedro Paulo Almeida')
    INSERT INTO Nomes VALUES ('Carlos Eduardo da Silva')
    INSERT INTO Nomes VALUES ('Rodrigo Diógenes Cunha Meira')
    INSERT INTO Nomes VALUES ('Maria') 
    ;WITH NomesF (Nome, NomeXML) AS (
    SELECT Nome,
    CAST('<N><n>' + REPLACE(Nome,' ','</n><n>') + '</n></N>' AS XML)
    FROM Nomes) 
    SELECT Nome, 
        CAST(NomeXML.query(
        'for $nome in /N return $nome/n[1]/text()'
        ) AS VARCHAR(80)) As PrimeiroNome, 
        CAST(NomeXML.query(
        'for $nome in /N return $nome/n[last()]/text()'
        ) AS VARCHAR(80)) As SobreNome, 
        CAST(NomeXML.query(
        'for $nome in /N return concat($nome/n[1],'' '',$nome/n[last()])'
        ) AS VARCHAR(80)) As NomeAbreviado 
    FROM NomesF


    Maiores detalhes em:

    Extraindo o nome e o sobrenome
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!219.entry

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como descobrir a data do último acesso a uma tabela ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!964.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 9 de março de 2010 16:29
  • Boa tarde Galera,

    Valeu pela ajuda, a query ficou a seguinte

     select Left( NOME,charindex(' ', NOME,1))as PrimeiroNome, right(NOME,charindex(' ', reverse(NOME)))as sobrenome from tabela

    abraços
    terça-feira, 9 de março de 2010 17:29
  • Bruno,

    Veja este outro exemplo:

    CREATE

     

    TABLE Nomes (Nome VARCHAR(80))

    2

    3

    INSERT INTO Nomes VALUES ('Joana Maria')

    4

    INSERT INTO Nomes VALUES ('Ana Paula Silveira')

    5

    INSERT INTO Nomes VALUES ('Pedro Paulo Almeida')

    6

    INSERT INTO Nomes VALUES ('Carlos Eduardo da Silva')

    7

    INSERT INTO Nomes VALUES ('Rodrigo Digenes Cunha Meira')

    8

    INSERT INTO Nomes VALUES ('Maria')

    9

    10

    ;WITH ResXML (Nome, NomeXML)

    11

    AS (

    12

    SELECT Nome, CAST('<N><n>' +

    13

    REPLACE(Nome,' ','</n><n>') +

    14

    '</n></N>' AS XML) FROM Nomes)

    15

    16

    SELECT Nome,

    17

    Nomes.N.value('(./text())[1]','nvarchar(50)') As Nome

    18

    FROM ResXML

    19

    CROSS APPLY NomeXML.nodes('./N/n') As Nomes(N)

     

    CREATE

     

    FUNCTION dbo.SeparaNomes (@Nome VARCHAR(MAX))

    2

    RETURNS @T TABLE (ParteNome NVARCHAR(50))

    3

    AS

    4

    BEGIN

    5

    DECLARE @NomeXML XML

    6

    SET @NomeXML = '<N><n>' + REPLACE(@Nome,' ','</n><n>') + '</n></N>'

    7

    8

    INSERT INTO @T

    9

    SELECT Nomes.N.value('(./text())[1]','nvarchar(50)') As ParteDoNome

    10

    FROM @NomeXML.nodes('./N/n') As Nomes(N)

    11

    12

    RETURN

    13

    END

    14

    15

    SELECT * FROM dbo.SeparaNomes ('Carlos Eduardo da Silva')


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 9 de março de 2010 17:39