[Basic SQL Code] Split Numbers

Olá pessoal,

Este é um artigo rápido onde vou compartilhar um código para fazer o split de uma lista de valores em um formato tabular. A idéia deste trecho de código surgiu em uma de minhas aulas na Impacta, como dúvida de um aluno. Veja abaixo o código na íntegra:

DECLARE
      @COUNT INT,
      @NUMS VARCHAR(100),
      @NUMS_AUX1 VARCHAR(100),
      @NUMS_AUX2 VARCHAR(100),     
      @POS INT,
      @SEPARATOR CHAR(1)
 
— lista de valores    
SET @NUMS = ’10;2;7;55;6;94;8;36;45;88;25′
— separador de cada valor
SET @SEPARATOR = ‘;’
 
SET @COUNT = LEN(@NUMS) –> total de caracteres da lista
SET @POS = 1                  –> posição de retorno da lista
SET @NUMS_AUX1 = ”           –> variável auxiliar 1
SET @NUMS_AUX2 = ”           –> variável auxiliar 2
 
— validação de existência da tabela temporária auxiliar
IF EXISTS(SELECT OBJECT_ID(‘TEMPDB..#NUMS’,’U’))
      DROP TABLE #NUMS
CREATE TABLE #NUMS (NUM INT)
 
— lógica para realizar o split dos números
WHILE @COUNT >= 0
BEGIN
      — variável auxiliar captura primeira posição da sequência
      SELECT @NUMS_AUX1 = SUBSTRING(@NUMS,@POS,1)
     
      — caso o valor capturado seja o separador ou eu tenho lido todos os caracteres,
      — insere o valor na tabela temporária auxiliar
      IF @NUMS_AUX1 = @SEPARATOR OR @COUNT = 0
      BEGIN
            INSERT INTO #NUMS VALUES (@NUMS_AUX2)
            SET @NUMS_AUX2 = ”
      END
      — caso contrário, atribui o valor para a variável auxiliar 2 e continua o loop
      ELSE
            SET @NUMS_AUX2 = @NUMS_AUX2 + ” + @NUMS_AUX1
 
      — decremento e incremento das variáveis @COUNT e @POS, que controla a posição
      — que está sendo capturada na lista de valores
      SET @COUNT -= 1  
      SET @POS += 1
END
 
— Exibe o resultado da lista de valores em formato tabular
SELECT * FROM #NUMS

Bons Estudos!
Erickson

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s