none
SQL Server - Resultado de única linha e coluna para coluna com várias linhas RRS feed

  • Pergunta

  • Possuo uma função no SQL que retorna uma única linha em uma única coluna com registros separados por pontos.

    Exemplo:

    Coluna 1: Resultado
    Linha 1: 0000000.0000001.0000002.0000003.0000004.0000005.0000006

    Gostaria de inserir cada valor em uma linha separada, porém em uma única coluna.

    Exemplo:

    Coluna 1: Resultado
    Linha 1: 0000000
    Linha 2: 0000001
    Linha 3: 0000002
    Linha 4: 0000003
    Linha 5: 0000004
    Linha 6: 0000005
    Linha 7: 0000006

    Resumo, preciso que meu resultado de uma coluna e uma linha se transforme em uma coluna com várias linhas, mas de maneira dinâmica, pois a quantidade de registros separados por pontos (.) podem variar, ou seja, posso ter 2 registros separados por pontos, que serão 2 linhas, ou 1000 registros, que serão 1000 linhas. 

    Como posso proceder?
    sexta-feira, 6 de janeiro de 2017 18:50

Respostas

  • Boa tarde,

    Segue uma alternativa para teste:

    declare @Coluna varchar(max);
    set @Coluna = '0000000.0000001.0000002.0000003.0000004.0000005.0000006';
    
    SELECT 
        O.splitdata 
    FROM
    (
         SELECT 
             cast('<X>' + replace(@Coluna, '.', '</X><X>') + '</X>' as XML) as xmlfilter 
    ) F1
    CROSS APPLY
    ( 
         SELECT 
             fdata.D.value('.', 'varchar(50)') as splitdata 
         FROM f1.xmlfilter.nodes('X') as fdata(D)
    ) O

    Espero que ajude


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

    sexta-feira, 6 de janeiro de 2017 19:01

Todas as Respostas

  • Boa tarde,

    Segue uma alternativa para teste:

    declare @Coluna varchar(max);
    set @Coluna = '0000000.0000001.0000002.0000003.0000004.0000005.0000006';
    
    SELECT 
        O.splitdata 
    FROM
    (
         SELECT 
             cast('<X>' + replace(@Coluna, '.', '</X><X>') + '</X>' as XML) as xmlfilter 
    ) F1
    CROSS APPLY
    ( 
         SELECT 
             fdata.D.value('.', 'varchar(50)') as splitdata 
         FROM f1.xmlfilter.nodes('X') as fdata(D)
    ) O

    Espero que ajude


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

    sexta-feira, 6 de janeiro de 2017 19:01
  • Olá, Tudo bem?

    A Função STRING_SPLIT Introduzida no SQL Server 2016 pode ajudar com isso fácilmente. Aonde ele irá separar tudo que estiver entre os pontos e criará uma linha para cada.

    DECLARE @STRING VARCHAR (60) = '0000000.0000001.0000002.0000003.0000004.0000005.0000006'
    SELECT * FROM STRING_SPLIT  (@STRING,'.')

    Exemplo:

    Espero Ajudar. Abs.



    • Editado João Vilar sexta-feira, 13 de outubro de 2017 14:17
    sexta-feira, 13 de outubro de 2017 14:08