terça-feira, 12 de maio de 2009

Split e join de strings em T-SQL

Olá,

Um das maiores necessidades dos desenvolvedores que trabalham com T-SQL é o de passar uma string com separadores como parâmetro em uma stored procedure, por exemplo, e usá-la como argumento em uma cláusula where como um conjunto, utilizando a palavra reservada IN.

A necessidade inversa também é importante, ou seja, concatenar o resultado de um campo de uma select em uma string separada por um determinado delimitador.

Estas tarefas, tão comuns em qualquer linguagem de programação, são também conhecidas como split e join.

Para executá-las em T-SQL, existem várias maneiras e muitos já postaram milhares de modos, no entanto, segue minha contribuição que creio ser uma das mais simples e eficientes pois usa dos recursos de XML do T-SQL para seu fim.

Para fazer o split:

DELCARE @string VARCHAR(200)
SET @string = '124, 456, 789, 121212, 3256 '
DECLARE @xmlAuxiliar XML
SET @xmlAuxiliar = '' + REPLACE(@string, ',', '') + ''
SELECT x.i.value('.', 'INT') FROM @xmlAuxiliar.nodes('//i') x(i)

Observação: pode-se substituir o INT da última instrução por outro tipo, como VARCHAR. Neste caso a lista seria algo como 'João, Pedro, Marcos, Lucas'

Para fazer o join:

SELECT NomeDoCampo + ', '
FROM NomeDaTabela
FOR XML PATH('')

Observação: seu separador pode ser outro que não ', '. Caso o retorno do campo não seja um tipo caractere, é necessário converter.

Abraços e até a próxima.

Nenhum comentário: