Usuário com melhor resposta
SQL Server - Resultado de única linha e coluna para coluna com várias linhas

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?
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
- Sugerido como Resposta William John Adam Trindade sexta-feira, 6 de janeiro de 2017 20:26
- Marcado como Resposta Robson William Silva segunda-feira, 9 de janeiro de 2017 11:24
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
- Sugerido como Resposta William John Adam Trindade sexta-feira, 6 de janeiro de 2017 20:26
- Marcado como Resposta Robson William Silva segunda-feira, 9 de janeiro de 2017 11:24
-
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