Ir para conteúdo
Fórum Script Brasil
  • 0

CHARINDEX - localizando e extraindo delimitadores em string


jothaz

Pergunta

DECLARE  @TESTE TABLE (NUMERO INT, OBS VARCHAR(100), CODIGO_LIMPO VARCHAR(1000))
INSERT INTO @TESTE (NUMERO,OBS) VALUES (1,'MARIA FOI A FEIRA [22.22.22] E COMPROU [ 22.55.55] ')
INSERT INTO @TESTE (NUMERO,OBS) VALUES (2,'[2.10.AA] O ALVO É MOVEL')
INSERT INTO @TESTE (NUMERO,OBS) VALUES (3,'[2.10.AC] O ALVO É MOVEL')
INSERT INTO @TESTE (NUMERO,OBS) VALUES (4,'[2.10.SA] O ALVO[ED.DE.DE] É MOVEL')
INSERT INTO @TESTE (NUMERO,OBS) VALUES (5,'[2.10.VA] O ALVO [11.1.11]É MOVEL')

DECLARE  @RESULTADO TABLE (CODIGO_LIMPO VARCHAR(1000))

DECLARE @NUMERO INT, @OBS VARCHAR(100)
DECLARE MYCURSOR CURSOR FOR
SELECT NUMERO,OBS FROM @TESTE 
OPEN MYCURSOR
FETCH NEXT FROM MYCURSOR INTO @NUMERO,@OBS

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @DELI_INI VARCHAR(5), @DELI_fim VARCHAR(5) ,@CONT INT, @AUX VARCHAR(200), @POS_INI INT, @POS_FIM INT

    -- SETANDO O DELIMITADOR
    SELECT @DELI_INI = '[', @DELI_fim = ']'

    SELECT @OBS = LTRIM(RTRIM(@OBS))


    WHILE LEN(@OBS) > 0
        BEGIN SELECT @POS_INI = CHARINDEX(@DELI_INI, @OBS)
        SELECT @POS_FIM = CHARINDEX(@DELI_FIM, @OBS)
        
        IF @POS_INI > 0 AND @POS_FIM > 0
        BEGIN
            SELECT @CONT = (@POS_FIM - @POS_INI) + 1
            SELECT @AUX = SUBSTRING(@OBS, @POS_INI, @CONT)

            --PARA JOGAR NO CAMPO_LIMPO UTILIZE O UPDATE A SEGUI
            INSERT INTO  @RESULTADO (CODIGO_LIMPO) VALUES (@AUX)
            SELECT @OBS = SUBSTRING(@OBS, @POS_FIM + 1, LEN(@OBS))
        END
        ELSE
        BEGIN
            BREAK
        END
    END
    FETCH NEXT FROM MYCURSOR INTO @NUMERO,@OBS
END
CLOSE MYCURSOR
DEALLOCATE MYCURSOR


SELECT * FROM @RESULTADO

Considerações finais:

O CHARINDEX em conjunto com as funções: SUBSTRIGN, LEN, CASE e outras permite a manipulação de string´s como qualquer outra linguagem de programação.

Fonte/Autor/link

AUTOR: "Jothaz"

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...