En el mundo de la gestión de bases de datos, SQL Server es ampliamente utilizado para almacenar y administrar datos de manera eficiente. En ocasiones, nos enfrentamos a la necesidad de dividir una cadena (string) en varias partes y almacenar esas partes en columnas separadas de una tabla. Esto puede ser especialmente útil cuando trabajamos con datos semi-estructurados o valores concatenados. En este artículo, exploraremos varios métodos efectivos para dividir strings en columnas en SQL Server, respaldados por ejemplos de código prácticos.
Método 1: Utilizando la función PARSENAME()
La función PARSENAME() se utiliza comúnmente para analizar objetos con nombres de cuatro partes en SQL Server, pero también puede ser útil para dividir strings en columnas. Esta función se basa en el hecho de que PARSENAME() considera el punto como un delimitador, lo que puede ser útil si tus strings siguen un patrón similar.
DECLARE @FullNames TABLE (FullName VARCHAR(100));
INSERT INTO @FullNames (FullName)
VALUES ('Smith.John'),('Doe.Jane'),('Williams.Mark');
SELECT
PARSENAME(REPLACE(FullName, '.', '.'), 3) AS LastName,
PARSENAME(REPLACE(FullName, '.', '.'), 2) AS MiddleName,
PARSENAME(REPLACE(FullName, '.', '.'), 1) AS FirstName
FROM @FullNames;
Método 2: Utilizando la función CHARINDEX() y SUBSTRING()
La combinación de las funciones CHARINDEX() y SUBSTRING() te permite dividir una cadena en partes utilizando un delimitador específico. En este ejemplo, utilizaremos el carácter ‘.’ como delimitador.
DECLARE @FullNames TABLE (FullName VARCHAR(100));
INSERT INTO @FullNames (FullName)
VALUES ('Smith.John'),('Doe.Jane'),('Williams.Mark');
SELECT
SUBSTRING(FullName, 1, CHARINDEX('.', FullName) - 1) AS LastName,
SUBSTRING(FullName, CHARINDEX('.', FullName) + 1, LEN(FullName) - CHARINDEX('.', FullName) - CHARINDEX('.', REVERSE(FullName))) AS FirstName
FROM @FullNames;
Método 3: Utilizando la función STRING_SPLIT() (SQL Server 2016 y versiones posteriores)
Si estás utilizando SQL Server 2016 o versiones posteriores, la función STRING_SPLIT() es una opción conveniente para dividir una cadena en una tabla de valores.
DECLARE @FullNames TABLE (FullName VARCHAR(100));
INSERT INTO @FullNames (FullName)
VALUES ('Smith.John'),('Doe.Jane'),('Williams.Mark');
SELECT
FirstNameParts.value('.', 'VARCHAR(100)') AS FirstName
FROM @FullNames
CROSS APPLY STRING_SPLIT(FullName, '.');
Estos son solo algunos de los métodos que puedes emplear para dividir strings en columnas en SQL Server. La elección del método depende de tus requisitos específicos y la versión de SQL Server que estés utilizando. Ya sea que prefieras la versatilidad de la función PARSENAME(), la precisión de CHARINDEX() y SUBSTRING(), o la simplicidad de STRING_SPLIT(), ahora tienes las herramientas para manejar este tipo de situaciones de manera efectiva. ¡Experimenta con estos métodos y elige el que mejor se adapte a tus necesidades!