Dividir una Cadena Delimitada en una Columna en SQL Server

¿Cómo dividir datos de una cadena única en línea con un delimitador en una columna usando SQL Server?

Tutorial sobre cómo dividir una cadena delimitada en una columna única en SQL Server, usando usualmente un punto y coma o una coma como delimitador. Con una consulta T-SQL en SQL Server 2012, es posible cortar una cadena de texto basada en un carácter especial con XML. Puede estar delimitada por comas, puntos y coma, tabulaciones, guiones, guiones bajos o incluso puntos. Básicamente, puede ser cualquier carácter especial que defina el texto delimitado. Este tutorial es para versiones de SQL Server anteriores a 2016, es decir, SQL Server 2008 y SQL Server 2012, por ejemplo.

1. Sobre cadenas delimitadas en SQL Server 2008 y 2012

De hecho, una forma fácil y eficiente es utilizar funciones integradas de SQL Server XML como CONVERT() y NODES(). Luego, usar una consulta Transact-SQL para dividir el texto en múltiples líneas. El poder de las funciones XML permite al desarrollador de SQL parsear y estructurar el texto más fácilmente. Por ejemplo, cortemos fácilmente esta cadena que contiene las diez ciudades más grandes de EE. UU. delimitadas con puntos y coma:

«New York; Los Angeles; Chicago; Houston; Phoenix; Philadelphia; San Antonio; San Diego; Dallas; San Jose»

Este ejemplo funciona con cualquier tipo de separadores también llamados delimitadores. Los más utilizados son:

  • Archivo delimitado por comas
  • Archivo delimitado por punto y coma
  • Archivo delimitado por tabulaciones
  • Archivo delimitado por barras verticales
  • Archivo delimitado por guiones

Y esta solución XML permite dividir textos en versiones anteriores a SQL Server 2016, como: SQL Server 2008 R2, SQL Server 2012 y SQL Server 2014.

2. Consulta T-SQL para dividir una cadena por delimitador en una columna

Por ejemplo, esta consulta Transact-SQL divide la cadena que contiene la lista de ciudades delimitadas por puntos y coma usando las funciones integradas de XML.

-- Declarar las variables
DECLARE @String nvarchar(max),
@Delimiter char(1),
@XMLString xml;

-- Inicializar la cadena y el delimitador, aquí es el carácter punto y coma 
SELECT @String = 'New York;Los Angeles;Chicago;Houston;Phoenix;Philadelphia;San Antonio;San Diego;Dallas;San Jose',
@Delimiter = ';'

-- Construcción de cadena XML usando la función CONVERT() de T-SQL
SET @XMLString = 
CONVERT(xml,'<root><city>' +
REPLACE(@String,@Delimiter,'</city><city>') +
'</city></root>');

SELECT @XMLString;

-- Selección del resultado parseando la variable @XMLString con las funciones XML .value() .nodes()
SELECT Result.value('.','varchar(20)') AS CITY
FROM @XMLString.nodes('/root/city') AS T(Result);

3. Resultado intermedio de la cadena dividida en formato XML

De hecho, para entender la lógica de la consulta, esta cadena delimitada estaba inicialmente contenida en la variable @String, como texto simple. Y la variable @XMLString solo contiene la lista inicial de ciudades en formato XML. Sin embargo, esta vez la lista está rodeada por etiquetas XML <root></root> y <city></city>. XML es un formato de datos complejo famoso comúnmente utilizado en archivos de intercambio de datos.

<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 cadena con delimitador en una columna con SQL Server
Dividir cadena con delimitador en una columna con SQL Server

XML es útil para dividir una cadena delimitada en una columna

Para resumir, este artículo muestra cómo dividir una cadena delimitada en una columna única en SQL Server. El primer ejemplo utiliza las funciones XML y es fácil de copiar y pegar. Por lo tanto, reutilízalo para un escenario de proyecto real o prueba de concepto. Similarmente para SQL Server 2016 y versiones superiores, puedes simplemente usar la función nativa Split_String.

¿Qué es un texto delimitado?

Un texto delimitado es una línea única que tiene múltiples partes. Cada parte está delimitada con un símbolo específico, por ejemplo, un punto y coma, una tabulación, una barra vertical.

¿Qué es un archivo de texto con delimitadores?

Un archivo de texto delimitado es un archivo que tiene múltiples columnas y cada dato contenido en cada línea está delimitado por un separador. Por ejemplo, el separador de línea en sí es un retorno de carro o un salto de línea.

Además, podrías estar interesado en aprender cómo agregar o quitar saltos de línea de cadenas SQL Server para almacenarlo en una única línea de una tabla. Y al mismo tiempo evitar desplazamientos de línea al importar archivos.

Be the first to comment

Leave a Reply

Tu dirección de correo no será publicada.


*