Dividir Texto Delimitado numa Coluna no SQL Server

Como dividir dados de uma string única em linha com um delimitador em uma coluna usando o SQL Server?

Tutorial sobre como dividir texto delimitado numa coluna no SQL Server, sendo o delimitador geralmente um ponto e vírgula ou uma vírgula. Com uma consulta T-SQL no SQL Server 2012, é possível cortar uma string composta de texto baseado em um caractere especial com XML. Pode ser delimitado por vírgulas, pontos e vírgulas, tabulações, traços, sublinhados ou até pontos. Basicamente, pode ser qualquer caractere especial que define o texto delimitado. Este tutorial é para versões do SQL Server anteriores a 2016, ou seja, SQL Server 2008 e SQL Server 2012, por exemplo.

1. Sobre texto delimitado no SQL Server 2008, 2012 e 2014

De fato, uma maneira fácil e eficiente é usar funções XML integradas do SQL Server como CONVERT() e NODES(). Em seguida, usa-se uma consulta Transact-SQL para dividir o texto em várias linhas. De fato, a potência das funções XML permite ao desenvolvedor SQL analisar e estruturar o texto mais facilmente. Por exemplo, vamos cortar facilmente esta string contendo as dez maiores cidades dos EUA delimitadas por pontos e vírgulas:

“New York; Los Angeles; Chicago; Houston; Phoenix; Philadelphia; San Antonio; San Diego; Dallas; San Jose”

Este exemplo funciona com qualquer tipo de separadores, também chamados de delimitadores. Os mais usados são:

  • Arquivo delimitado por vírgula
  • Arquivo delimitado por ponto e vírgula
  • Arquivo delimitado por tabulação
  • Arquivo delimitado por barra vertical
  • Arquivo delimitado por traço

E esta solução XML permite dividir textos em versões anteriores ao SQL Server 2016, como: SQL Server 2008 R2, SQL Server 2012 e SQL Server 2014.

2. Consulta T-SQL para dividir string por delimitador em uma coluna

Vamos continuar a explicar como dividir texto delimitado numa coluna única com linhas diferentes no SQL Server. Por exemplo, esta consulta Transact-SQL divide a string contendo a lista de cidades delimitadas por pontos e vírgulas usando as funções integradas XML.

-- Declare as variáveis
DECLARE @String nvarchar(max),
@Delimiter char(1),
@XMLString xml;

-- Inicialize a string e o delimitador, aqui é o caractere ponto e vírgula
SELECT @String = 'New York;Los Angeles;Chicago;Houston;Phoenix;Philadelphia;San Antonio;San Diego;Dallas;San Jose',
@Delimiter = ';'

-- Construção de String XML usando a função T-SQL CONVERT()
SET @XMLString = 
CONVERT(xml,'<root><city>' +
REPLACE(@String,@Delimiter,'</city><city>') +
'</city></root>');

SELECT @XMLString;

-- Seleção do resultado ao analisar a variável @XMLString com as funções XML .value() .nodes()
SELECT Result.value('.','varchar(20)') AS CITY
FROM @XMLString.nodes('/root/city') AS T(Result);

3. Resultado intermediário da string dividida em formato XML

De fato, para entender a lógica da consulta, esta string delimitada estava inicialmente contida na variável @String, como texto simples. E a variável @XMLString contém apenas a lista inicial de cidades em formato XML. No entanto, desta vez a lista está rodeada por tags XML <root></root> e <city></city>. XML é um formato de dados complexo comumente usado em arquivos de troca de dados.

<root>
	<city>New York</city>
	<city>Los Angeles</city>
	<city>Chicago</city>
	<city>Houston</city>
	<city>Phoenix</city>
	<city>Philadelphia</city>
	<city>San Antonio</city>
	<city>San Diego</city>
	<city>Dallas</city>
	<city>San Jose</city>
</root>
Dividir string com delimitador em uma coluna com SQL Server
Dividir string com delimitador em uma coluna com SQL Server

Diferentes maneiras de dividir um texto delimitado

Para resumir, este artigo mostra como dividir texto delimitado em numa coluna única no SQL Server com dados em linhas diferentes. O primeiro exemplo usa as funções XML e é fácil de copiar e colar. Por isso, reutilize-o para um cenário de projeto real ou prova de conceito. Da mesma forma, para o SQL Server 2016 e versões superiores, você pode simplesmente usar a função nativa Split_String.

O que é um texto delimitado?

Um texto delimitado é uma única linha que tem várias partes. Cada parte é delimitada com um símbolo específico, por exemplo, um ponto e vírgula, uma tabulação, uma barra vertical.

O que é um arquivo de texto com delimitadores?

Um arquivo de texto delimitado é um arquivo que tem várias colunas e cada dado contido em cada linha é delimitado por um separador. Por exemplo, o próprio separador de linha é um retorno de carro ou uma quebra de linha.

Da mesma forma, você pode estar interessado em aprender como adicionar ou remover quebras de linha de strings do SQL Server para armazená-las em uma única linha de uma tabela. E, ao mesmo tempo, evitar deslocamentos de linha ao importar arquivos.

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*