Boa noite computêros,

Muitas linguagens de programação (leia-se quase todas), possui uma função de split, ou seja, passamos uma string de referência e um delimitador e ela transforma os dados obtidos em formato de vetor.

Exemplo:

Blog do Computêro

Split(“Blog do Computêro”,” “) – traduzindo, separe a string “Blog do Computêro” em um vetor, com o delimitador ” ” – espaço em branco…

Ficando assim:

0 – Blog

1 – do

2 – Computêro

Entederam mais ou menos a idéia do split??? (Qualquer dúvida utilize os comentários)

Esse método é nativo em muitas linguagens, mas e no SQL Server 2000, como faremos??? Achei dois métodos bem legais na net…

DECLARE @ARRAY VARCHAR(8000), @DELIMITADOR VARCHAR(100), @S VARCHAR(8000)

-- VALORES PASSADOS PARA A VARIAVEL @ARRAY
SELECT @ARRAY = 'Adriano,Israel,Abdul,Cesar'
-- SETANDO O DELIMITADOR
SELECT @DELIMITADOR = ','

--Criando tabela temporária para armazenar os itens encontrados
IF LEN(@ARRAY) > 0 SET @ARRAY = @ARRAY + @DELIMITADOR
CREATE TABLE #ARRAY(ITEM_ARRAY VARCHAR(8000))

--Buscando os itens separados pelo caracter delimitador
WHILE LEN(@ARRAY) > 0
BEGIN
SELECT @S = LTRIM(SUBSTRING(@ARRAY, 1, CHARINDEX(@DELIMITADOR, @ARRAY) - 1))
INSERT INTO #ARRAY (ITEM_ARRAY) VALUES (@S)
SELECT @ARRAY = SUBSTRING(@ARRAY, CHARINDEX(@DELIMITADOR, @ARRAY) + 1, LEN(@ARRAY))
END

-- MOSTRANDO O RESULTADO JÁ POPULADO NA TABELA TEMPORÁRIA
SELECT * FROM #ARRAY
DROP TABLE #ARRAY

SET NOCOUNT OFF
CREATE FUNCTION dbo.fnSplit(
@frase VARCHAR(max)
, @delimitador VARCHAR(max) = ','
) RETURNS @result TABLE (item VARCHAR(8000))

BEGIN
DECLARE @parte VARCHAR(8000)
WHILE CHARINDEX(@delimitador,@frase,0) <> 0
BEGIN
SELECT
@parte=RTRIM(LTRIM(SUBSTRING(@frase,1,CHARINDEX(@delimitador,@frase,0)-1))),
@frase=RTRIM(LTRIM(SUBSTRING(@frase,CHARINDEX(@delimitador,@frase,0)+LEN(@delimitador),LEN(@frase))))
IF LEN(@parte) > 0
INSERT INTO @result SELECT @parte
END

IF LEN(@frase) > 0
INSERT INTO @result SELECT @frase
RETURN
END
GO

Utilização:

SELECT * FROM dbo.fnSplit('separar por espaço em branco', ' ')

É isso aí computêros, qualquer dúvida…