¿Cómo dividir una cadena por un carácter delimitado en SQL Server?



Pruebe Nuestro Instrumento Para Eliminar Los Problemas

En este artículo, analizaremos varias formas de dividir el valor de cadena delimitado. Se puede lograr utilizando múltiples métodos, incluidos.



  • Uso de la función STRING_SPLIT para dividir la cadena
  • Cree una función con valores de tabla definida por el usuario para dividir la cadena,
  • Utilice XQuery para dividir el valor de la cadena y transformar una cadena delimitada en XML

En primer lugar, debemos crear una tabla e insertar datos en ella que se utilizarán en los tres métodos. La tabla debe contener una sola fila con la identificación del campo y una cadena con caracteres delimitadores. Cree una tabla llamada 'estudiante' usando el siguiente código.



CREAR TABLA estudiante (ID INT IDENTIDAD (1, 1), nombre_estudiante VARCHAR (MAX))

Inserte los nombres de los estudiantes separados por comas en una sola fila ejecutando el siguiente código.



INSERT INTO student (student_name) VALUES ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Creación de tablas e inserción de datos

Verifique si los datos se han insertado en la tabla o no usando el siguiente código.

seleccionar * de estudiante

Verifique si los datos se han insertado en la tabla 'estudiante'



Método 1: use la función STRING_SPLIT para dividir la cadena

En SQL Server 2016, 'STRING_SPLIT' Se introdujo una función que se puede utilizar con el nivel de compatibilidad 130 y superior. Si usa la versión 2016 de SQL Server o superior, puede usar esta función incorporada.

además 'STRING_SPLIT' ingresa una cadena que tiene subcadenas delimitadas e ingresa un carácter para usar como delimitador o separador. La función genera una tabla de una sola columna cuyas filas contienen las subcadenas. El nombre de la columna de salida es ' Valor' . Esta función obtiene dos parámetros. El primer parámetro es una cadena y el segundo es un carácter delimitador o separador en función del cual tenemos que dividir la cadena. La salida contiene una tabla de una sola columna en la que hay subcadenas. Esta columna de salida se llama 'Valor' como podemos ver en la siguiente figura. Además, el 'STRING SPLIT' La función table_valued devuelve una tabla vacía si la cadena de entrada es NULL.

Nivel de compatibilidad de la base de datos:

Cadabase de datosesconectadoconcompatibilidadnivel.Esohabilitalabase de datoscomportamientoasercompatible con thesparticular SQLServidorversiónesocarrerasen.

Ahora llamaremos a la función “string_split” para dividir la cadena delimitada por comas. Pero el nivel de compatibilidad era inferior a 130, por lo que se generó un error de seguimiento. 'Nombre de objeto no válido 'SPLIT_STRING''

Se produce un error si el nivel de compatibilidad de la base de datos es inferior a 130 'Nombre de objeto no válido split_string'

Por lo tanto, debemos establecer el nivel de compatibilidad de la base de datos en 130 o más. Seguiremos estos pasos para establecer el nivel de compatibilidad de la base de datos.

  • En primer lugar, configure la base de datos en “single_user_access_mode” utilizando el siguiente código.
ALTER DATABASE SET SINGLE_USER
  • En segundo lugar, cambie el nivel de compatibilidad de la base de datos utilizando el siguiente código.
ALTER DATABASE SET COMPATIBILITY_LEVEL = 130
  • Vuelva a poner la base de datos en el modo de acceso multiusuario utilizando el siguiente código.
ALTER DATABASE SET MULTI_USER
USE [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

La salida será:

Cambiar el nivel de compatibilidad a 130

Ahora ejecute este código para obtener el resultado requerido.

DECLARE @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * FROM STRING_SPLIT (@string_value,