Função Split no SQL Server
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…
- Utilizando tabelas temporárias (site orginal)
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
- Criando uma função (site original)
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…
Bacana foi útil pra mim. Vlw