Olá pessoal,
Boa tarde!

Neste post vou demonstrar uma table-valued function bem legal que permite quebrar um string em uma tabela de substrings utilizando um delimitador no SQL Server. O que isso quer dizer? Bom, isso faz como que você tenha uma string e a função irá transformar essa string em uma tabela utilizando um separador. Nessa tabela, cada registro será uma parte da string no índice i+1 e você poderá trabalhar facilmente com essas substrings.

Interessado em aprender mais sobre split?

Exemplos de utilização da função

SQL Server - fncSplitTexto Como quebrar um string em uma tabela de substrings utilizando um delimitador
SQL Server - fncSplitTexto Como quebrar um string em uma tabela de substrings utilizando um delimitador

Como implementar isso no seu banco de dados SQL Server

Essa é a parte mais legal: Mãos à obra!
Visualizar código-fonte

CREATE FUNCTION [dbo].[fncSplitTexto] (
    @Ds_Texto VARCHAR(MAX),
    @Ds_Delimitador VARCHAR(100)
)
RETURNS @Tabela_Palavras TABLE
(
    Id INT,
    Palavra VARCHAR(MAX)
)
AS
BEGIN

    DECLARE
        @Ds_String VARCHAR(MAX),
        @Ds_Palavra VARCHAR(MAX) = '',
        @Qt_Palavras INT = 1


    IF (LEN(@Ds_Texto) > 0)
       SET @Ds_Texto = @Ds_Texto + @Ds_Delimitador   

    
    WHILE (LEN(@Ds_Texto) > 0)
    BEGIN  
    
        
        SET @Ds_String = LTRIM(SUBSTRING(@Ds_Texto, 1, CHARINDEX(@Ds_Delimitador, @Ds_Texto) - 1))  


        IF (@Ds_Palavra = ' ')
            SET @Ds_Palavra = '' 
        
        
        IF ((@Qt_Palavras = 1 AND LEN(@Ds_Palavra) > 0) OR @Qt_Palavras > 1)
        BEGIN
            
            INSERT INTO @Tabela_Palavras ( Id, Palavra )
            VALUES ( @Qt_Palavras, @Ds_Palavra ) 
                
            SET @Qt_Palavras = @Qt_Palavras + 1
            
        END
        
        
        SET @Ds_Palavra = @Ds_String
        SET @Ds_Texto = SUBSTRING(@Ds_Texto, CHARINDEX(@Ds_Delimitador, @Ds_Texto) + 1, LEN(@Ds_Texto))
          
    END  


    -- Insere o resto do texto
    INSERT INTO @Tabela_Palavras ( Id, Palavra )
    VALUES ( @Qt_Palavras, @Ds_Palavra ) 


    RETURN


END

Criando a função com o CLR

Uma outra alternativa de se utilizar esse recurso, é através do SQLCLR, um recurso que permite criar códigos .NET dentro do banco de dados e geralmente obtém uma performance muito superior ao Transact-SQL. Se você não conhece o CLR, saiba mais acessando o post Introdução ao SQL CLR (Common Language Runtime) no SQL Server.

Visualizar código-fonte da função C# (CLR)
using System.Collections;
using System.Data.SqlTypes;

public partial class UserDefinedFunctions
{

    private class SplitTabela
    {

        public readonly SqlInt32 Id;
        public SqlString Ds_Palavra;

        public SplitTabela(SqlInt32 id, SqlString dsPalavra)
        {
            Id = id;
            Ds_Palavra = dsPalavra.IsNull ? "" : dsPalavra;
        }
    }

    [Microsoft.SqlServer.Server.SqlFunction(
        FillRowMethodName = "FillSplitTabela",
        TableDefinition = "Id INT, Ds_Palavra NVARCHAR(4000)"
    )]
    public static IEnumerable fncSplit_Tabela(string Ds_Texto, string Ds_Separador)
    {

        var splitTabelaCollection = new ArrayList();

        if (string.IsNullOrEmpty(Ds_Texto))
            return splitTabelaCollection;

        var arrPalavras = Ds_Texto.Trim().Split(Ds_Separador.ToCharArray());

        for (var index = 0; index < arrPalavras.Length; index++)
        {

            var palavra = arrPalavras[index];

            splitTabelaCollection.Add(new SplitTabela(
                (index + 1),
                palavra
            ));

        }

        return splitTabelaCollection;

    }

    protected static void FillSplitTabela(object objSplitTabela, out SqlInt32 id, out SqlString dsPalavra)
    {

        var splitTabela = (SplitTabela) objSplitTabela;

        id = splitTabela.Id;
        dsPalavra = splitTabela.Ds_Palavra.IsNull ? "" : splitTabela.Ds_Palavra;

    }

};

Simples e prático, né ?
Abraços!

sql server tsql query table function split explode text string substring função quebrar palavra usando delimitador delimiter

sql server tsql query table function split explode text string substring função quebrar palavra usando delimitador delimiter