Como dividir uma string por um caractere delimitado no SQL Server?



Experimente Nosso Instrumento Para Eliminar Problemas

Neste artigo, discutiremos várias maneiras de dividir o valor da string delimitada. Isso pode ser alcançado usando vários métodos, incluindo.



  • Uso da função STRING_SPLIT para dividir a string
  • Crie uma função com valor de tabela definida pelo usuário para dividir a string,
  • Use XQuery para dividir o valor da string e transformar uma string delimitada em XML

Primeiramente, precisamos criar uma tabela e inserir nela dados que serão usados ​​em todos os três métodos. A tabela deve conter uma única linha com o id do campo e uma string com caracteres delimitadores. Crie uma tabela chamada “aluno” usando o seguinte código.



CRIAR TABELA aluno (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Insira os nomes dos alunos separados por vírgulas em uma única linha executando o código a seguir.



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

Criação de tabelas e inserção de dados

Verifique se os dados foram inseridos na tabela ou não usando o código a seguir.

selecione * do aluno

Verifique se os dados foram inseridos na tabela “aluno”



Método 1: use a função STRING_SPLIT para dividir a string

No SQL Server 2016, “STRING_SPLIT” foi introduzida a função que pode ser usada com nível de compatibilidade 130 e acima. Se você usar a versão 2016 do SQL Server ou superior, poderá usar esta função integrada.

além disso “STRING_SPLIT” insere uma string que tem subcadeias delimitadas e insere um caractere para usar como delimitador ou separador. A função produz uma tabela de coluna única cujas linhas contêm as subcadeias. O nome da coluna de saída é “ Valor' . Esta função obtém dois parâmetros. O primeiro parâmetro é uma string e o segundo é um caractere delimitador ou separador com base no qual devemos dividir a string. A saída contém uma tabela de coluna única na qual substrings estão presentes. Esta coluna de saída é chamada 'Valor' como podemos ver na figura abaixo. Além disso, o “STRING SPLIT” A função table_valued retorna uma tabela vazia se a string de entrada for NULL.

Nível de compatibilidade do banco de dados:

Cadabase de dadoséconectadocomparacompatibilidadenível.istopermiteabanco de dadoscomportamentoparaestarcompatívelcom ThéespecialSQLServidorversãoistocorreem.

Agora chamaremos a função “string_split” para dividir a string delimitada por vírgulas. Mas o nível de compatibilidade era inferior a 130, portanto, o erro seguinte foi gerado. “Nome de objeto inválido‘ SPLIT_STRING '”

O erro surge se o nível de compatibilidade do banco de dados for inferior a 130 “nome de objeto inválido split_string”

Portanto, precisamos definir o nível de compatibilidade do banco de dados como 130 ou superior. Portanto, seguiremos essas etapas para definir o nível de compatibilidade do banco de dados.

  • Em primeiro lugar, defina o banco de dados como “single_user_access_mode” usando o código a seguir.
ALTER DATABASE SET SINGLE_USER
  • Em segundo lugar, altere o nível de compatibilidade do banco de dados usando o código a seguir.
ALTER DATABASE SET COMPATIBILITY_LEVEL = 130
  • Coloque o banco de dados de volta no modo de acesso multiusuário usando o código a seguir.
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

O resultado será:

Mude o nível de compatibilidade para 130

Agora execute este código para obter o resultado necessário.

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