Warning: preg_match(): Unknown modifier 'b' in /mnt/datadisk/www/src/Controllers/PostController.php on line 206 Cómo dividir una string en una tabla de substrings usando un delimitador en SQL Server — Dirceu ResendeSaltar al contenido
En esta publicación, demostraré una función con valores de tabla realmente interesante que le permite dividir una cadena en una tabla de subcadenas usando un delimitador en SQL Server. ¿Qué quiere decir esto? Bueno, esto hace que parezca que tienes una cadena y la función transformará esta cadena en una tabla usando un separador. En esta tabla, cada registro será parte de la cadena en el índice i+1 y podrá trabajar fácilmente con estas subcadenas.
SQL Server - fncSplitTexto Cómo dividir una cadena en una tabla de subcadenas usando un delimitador
Cómo implementar esto en su base de datos de SQL Server
Esta es la parte más interesante: ¡manos a la obra! Ver código fuente
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
Creando la función con el CLR
Otra alternativa al uso de este recurso es a través de SQLCLR, un recurso que permite crear código .NET dentro de la base de datos y que generalmente logra un rendimiento mucho mejor que Transact-SQL. Si no conoces CLR, infórmate accediendo al post Introducción a SQL CLR (Common Language Runtime) en SQL Server.
Ver el código fuente de la función 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;
}
};
Sencillo y práctico, ¿verdad?
¡Abrazos!
servidor SQL función de tabla de consulta tsql dividir explota cadena de texto función de subcadena romper palabra usando delimitador delimitador
servidor SQL función de tabla de consulta tsql dividir explota cadena de texto función de subcadena romper palabra usando delimitador delimitador
Dirceu Resende
Arquitecto de Bases de Datos y BI · Microsoft MVP · MCSE, MCSA, MCT, MTA, MCP.
Comentários (0)
Carregando comentários…