none
Como separar um campo de string em duas partes?

    Question

  • Olá Pessoal!

    Será que alguem poderia me ajudar?

    Tenho um banco de dados que preiso separar em duas partes um campo de nomes.

    Numa consulta simples ele retorna:
    ---------------------------------------------------------------------------------
    Col_nome
    Maria da Silva
    José da Silva Franco





    No resultado esperado o retorno seria:
    ---------------------------------------------------------------------------------
    Col_Nome                  Col_Sobrenome
    Maria da                     Silva
    José da Silva               Franco



    Muito Obrigada!
    Wednesday, March 10, 2010 3:04 PM

Answers

  • 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, 
        SUBSTRING(Nome,1,len(nome)-LEN(RIGHT(Nome,CHARINDEX(' ',REVERSE(Nome))))),
        RIGHT(Nome,CHARINDEX(' ',REVERSE(Nome)))
    FROM @t 


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    Wednesday, March 10, 2010 4:40 PM
  • Elaine,

    Veja este 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
    Wednesday, March 10, 2010 4:55 PM

All replies

  • 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, 
        SUBSTRING(Nome,1,len(nome)-LEN(RIGHT(Nome,CHARINDEX(' ',REVERSE(Nome))))),
        RIGHT(Nome,CHARINDEX(' ',REVERSE(Nome)))
    FROM @t 


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    Wednesday, March 10, 2010 4:40 PM
  • Elaine,

    Veja este 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
    Wednesday, March 10, 2010 4:55 PM