Etereo
Global Moderator
Habitante
Karma: 9
Desconectado
Mensajes: 2374
|
|
« Respuesta #1 : Septiembre 19, 2007, 09:02:07 » |
|
CREATE Function [dbo].[F_SPLIT]( @InputText Varchar(4000), -- El texto que se va a separar en filas @Delimiter Varchar(10)) -- El separador o delimitador que va a separar el texto -- Pueden ser uno o varios caracteres o el valor nulo
RETURNS @Array TABLE ( TokenID Int PRIMARY KEY IDENTITY(1,1), --Comenta esta línea si no quieres una columna identidad en la tabla Value Varchar(4000))
AS
----------------------------------------------------------- -- Función Split -- -- • Devuelve una tabla donde se encuentran las filas correspondientes a cada una de las partes en que se separó la cadena-- -----------------------------------------------------------
BEGIN
DECLARE @Pos Int, -- Comienzo del carácter o caracteres @End Int, -- Fin del carácter o caracteres @TextLength Int, -- Tamaño del texto pasado por parámetro @DelimLength Int -- Tamaño del delimitador
SET @TextLength = DataLength(@InputText)
-- Salimos de la función si el tamaño del texto es cero IF @TextLength = 0 RETURN
SET @Pos = 1 SET @DelimLength = DataLength(@Delimiter)
IF @DelimLength = 0 BEGIN -- Si el tamaño del delimitador es cero entonces cada carácter en una fila WHILE @Pos <= @TextLength BEGIN INSERT @Array (Value) VALUES (SubString(@InputText,@Pos,1)) SET @Pos = @Pos + 1 END END ELSE BEGIN -- Se añade el delimitador para ver el último elemento SET @InputText = @InputText + @Delimiter -- Busca el último carácter del primer elemento SET @End = CharIndex(@Delimiter, @InputText) WHILE @End > 0 BEGIN -- Si @End es mayor que cero se ha encontrado un delimitador y por lo tanto otro elemento INSERT @Array (Value) VALUES (SubString(@InputText, @Pos, @End - @Pos)) -- Se establece la siguiente búsqueda al inicio del final del anterior elemento SET @Pos = @End + @DelimLength -- Se busca el último carácter del siguiente elemento SET @End = CharIndex(@Delimiter, @InputText, @Pos) END END RETURN
END |