Com es pot dividir una cadena per un caràcter delimitat a SQL Server?



Proveu El Nostre Instrument Per Eliminar Problemes

En aquest article, parlarem de diverses maneres de dividir el valor de cadena delimitat. Es pot aconseguir utilitzant múltiples mètodes, inclosos.



  • Ús de la funció STRING_SPLIT per dividir la cadena
  • Creeu una funció de taula definida per l'usuari per dividir la cadena,
  • Utilitzeu XQuery per dividir el valor de la cadena i transformar una cadena delimitada en XML

Primer de tot, hem de crear una taula i inserir-hi dades que s’utilitzaran en els tres mètodes. La taula ha de contenir una sola fila amb identificador de camp i cadena amb caràcters delimitadors. Creeu una taula anomenada 'estudiant' mitjançant el codi següent.



CREA TAULA estudiant (ID INT IDENTITAT (1, 1), nom_estudiant VARCHAR (MAX))

Inseriu noms d'estudiants separats per comes en una sola fila executant el codi següent.



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

Creació de taules i inserció de dades

Verifiqueu si s'han inserit dades a la taula o no mitjançant el codi següent.

seleccioneu * d'un estudiant

Verifiqueu si s'han inserit dades a la taula 'estudiant'



Mètode 1: utilitzeu la funció STRING_SPLIT per dividir la cadena

A SQL Server 2016, 'STRING_SPLIT' es va introduir la funció que es pot utilitzar amb el nivell de compatibilitat 130 i superior. Si utilitzeu la versió de SQL Server 2016 o superior, podeu utilitzar aquesta funció integrada.

a més 'STRING_SPLIT' introdueix una cadena que té sub-cadenes delimitades i introdueix un caràcter per utilitzar-lo com a delimitador o separador. La funció emet una taula d'una sola columna les files de les quals contenen les subcadenes. El nom de la columna de sortida és ' Valor ” . Aquesta funció obté dos paràmetres. El primer paràmetre és una cadena i el segon és un caràcter delimitador o un separador en funció del qual hem de dividir la cadena. La sortida conté una taula d'una sola columna on hi ha substrings. Es denomina aquesta columna de sortida 'Valor' com podem veure a la figura següent. A més, el 'STRING SPLIT' La funció table_valued retorna una taula buida si la cadena d'entrada és NULL.

Nivell de compatibilitat de la base de dades:

Cadascunbase de dadesésconnectatambacompatibilitatnivell.Aixòhabilitaelbase de dadescomportamentasercompatibleamb thésparticularSQLServidorversióaixòcarreresencès.

Ara anomenarem la funció 'string_split' per dividir la cadena delimitada per comes. Però el nivell de compatibilitat era inferior a 130, de manera que es va elevar el següent error. 'El nom de l'objecte no és vàlid' SPLIT_STRING ''

Es produeix un error si el nivell de compatibilitat de la base de dades és inferior a 130 'Nom d'objecte no vàlid split_string'

Per tant, hem d’establir el nivell de compatibilitat de la base de dades a 130 o superior. Per tant, seguirem aquests passos per establir el nivell de compatibilitat de la base de dades.

  • Primer de tot, configureu la base de dades a 'single_user_access_mode' mitjançant el següent codi.
ALTER DATABASE SET SET SINGLE_USER
  • En segon lloc, canvieu el nivell de compatibilitat de la base de dades mitjançant el codi següent.
ALTER DATABASE SET SET COMPATIBILITY_LEVEL = 130
  • Torneu a posar la base de dades al mode d’accés multiusuari mitjançant el codi següent.
ALTER DATABASE SET SET MULTI_USER
USE [mestre] 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 sortida serà:

Canvieu el nivell de compatibilitat a 130

Ara executeu aquest codi per obtenir el resultat requerit.

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