
Resumen: en este tutorial, aprenderás a usar la función STRING_SPLIT()
de SQL Server para dividir una cadena en una fila de subcadenas en función de un separador específico.
Introducción a la función STRING_SPLIT() de SQL Server
La función STRING_SPLIT()
es una función con valores de tabla que divide una cadena en una tabla que consta de filas de subcadenas según un separador especificado.
A continuación se muestra la sintaxis de la función STRING_SPLIT()
:
STRING_SPLIT ( input_string , separator )
En esta sintaxis:
input_string
es una expresión basada en caracteres que se evalúa como una cadena NVARCHAR, VARCHAR, NCHAR o CHAR.separator
es un carácter único que se utiliza como separador para dividir.
La función STRING_SPLIT()
devuelve una tabla de una sola columna, cuyo nombre de columna es value
. Esta tabla de resultados contiene filas que son las subcadenas.
Ten en cuenta que los valores en la columna de value
pueden estar en cualquier orden de clasificación. Para obtener el orden esperado, debes agregar la cláusula ORDER BY a la instrucción SELECT:
ORDER BY value [ASC|DESC]
Ejemplos del uso de la función STRING_SPLIT() de SQL Server
Veamos algunos ejemplos del uso de la función STRING_SPLIT()
.
A) Usar la función STRING_SPLIT() para dividir una cadena de valores separados por comas
Este ejemplo usa la función STRING_SPLIT()
para analizar una lista de valores separados por comas:
SELECT
value
FROM
STRING_SPLIT('red,green,,blue', ',');
Resultado:
value
---------------
red
green
blue
(4 rows affected)
La tercera fila está vacía porque la cadena de entrada contiene dos comas consecutivas (,,)
. Para obtener subcadenas no vacías, agrega una cláusula WHERE a la declaración SELECT como se muestra en la siguiente consulta:
SELECT
value
FROM
STRING_SPLIT('red,green,,blue', ',')
WHERE
TRIM(value) <> '';
Resultado:
value
---------------
red
green
blue
(3 rows affected)
B) Usar la función STRING_SPLIT() para dividir una cadena separada por comas en una columna
A veces, las tablas de la base de datos no están normalizadas. Un ejemplo típico de esto es cuando una columna puede almacenar múltiples valores separados por una coma (,)
.
STRING_SPLIT()
puedes ayudar a normalizar los datos al dividir estas columnas de valores múltiples.
Preparemos una tabla de muestra para la demostración.
Primero, crea una nueva tabla llamada sales.contacts
que almacene información de contacto:
CREATE TABLE sales.contacts (
id INT PRIMARY KEY IDENTITY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
phones VARCHAR(500)
);
En segundo lugar, inserta algunos contactos en la tabla sales.contacts:
INSERT INTO
sales.contacts(first_name, last_name, phones)
VALUES
('John','Doe','(408)-123-3456,(408)-123-3457'),
('Jane','Doe','(408)-987-4321,(408)-987-4322,(408)-987-4323');
Tercero, usa la función STRING_SPLIT()
para dividir los números de teléfono y CROSS APPLY
para unirlos con la tabla sales.contacts
:
SELECT
first_name,
last_name,
value phone
FROM
sales.contacts
CROSS APPLY STRING_SPLIT(phones, ',');
Resultado
C) Usar la función STRING_SPLIT() con una función agregada
El siguiente ejemplo devuelve los contactos y el número de teléfonos para cada contacto, para eso se usa CONCAT_WS, COUNT y GROUP BY:
SELECT
CONCAT_WS(' ',first_name,last_name) full_name,
COUNT(value) number_of_phones
FROM
sales.contacts
CROSS APPLY STRING_SPLIT(phones, ',')
GROUP BY
CONCAT_WS(' ',first_name,last_name);
Resultado:
En este tutorial, has aprendido a utilizar la función STRING_SPLIT()
para dividir cadenas en una tabla de subcadenas mediante un separador específico.