none
Extrair dados de um texto (SUBSTRING) RRS feed

  • Pergunta

  • Olá, 

    estou com um problema que ainda não consegui desenvolver uma solução, vamos lá;

    Eu tenho uma coluna na minha tabela que possui alguns valores de Limite de uma maquina especifica, por exemplo: 1207, 65.2/1200,69.5/1208,23.9/1211.25,5

    ou seja, é o código do item seguido do valor dele, porem esse valor pode variar.

    Todos esses números vem em um unico campo, e eu precisava pegar o valor apenas do item 1208, ou seja, precisaria apenas do valor 23.9.

    eu tentei usando uma substring, só que ela eu nao funcionou legal.

    quinta-feira, 22 de fevereiro de 2018 11:34

Respostas

Todas as Respostas

  • Erikada Dantas,

        Preenchi um campo meu "TipoEndereco" com o seu valor e tentei extrair o que você procura.

        Eu usei uma combinação de:

        - "CHARINDEX" (para encontrar a posição do número "1208");
        - "LEN" (dizer o tamanho de "1208" (óbvio que é 4, mas a ideia é se for uma variável ao invés de um número fixo) + 1 (vírgula));
        - "SUBSTRING" (pegar um valor a partir da posição indicada);

    select TipoEndereco, SUBSTRING(TipoEndereco,CHARINDEX('1208', TipoEndereco) + LEN('1208') + 1, 4)
    from tbCliente
    where CodCliente = 1

        Por favor, veja se é isso que você procura.

        Se o tamanho "4" de "23.4" (4 caracteres) mudar (exemplo: "809.7"), é possível basear-se no "/" para um valor posterior a posição de "1208".

    []'s,
    Fabio I.
    • Editado Fabio I quinta-feira, 22 de fevereiro de 2018 12:21
    • Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 23 de fevereiro de 2018 12:37
    quinta-feira, 22 de fevereiro de 2018 12:14
  • Deleted
    quinta-feira, 22 de fevereiro de 2018 14:04
  • Um exemplo para ser implementado no seu problema:

    CREATE FUNCTION dbo.UFN_SEPARATES_COLUMNS(
     @TEXT 
    varchar(8000)
    ,@COLUMN    
    tinyint
    ,@SEPARATOR char(1)
    )RETURNS varchar(8000)
    AS
      BEGIN
           DECLARE @POS_START  int = 1
           DECLARE @POS_END    int = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)

           WHILE (@COLUMN >1 AND @POS_END> 0)
             BEGIN
                 SET @POS_START = @POS_END + 1
                 SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)
                 SET @COLUMN = @COLUMN - 1
             END 

           IF @COLUMN > 1  SET @POS_START = LEN(@TEXT) + 1
           IF @POS_END = 0 SET @POS_END = LEN(@TEXT) + 1 

           RETURN SUBSTRING (@TEXT, @POS_START, @POS_END - @POS_START)
      END
    GO

    DECLARE @STR AS VARCHAR(255),@VALOR VARCHAR(255)
    SET @STR = '1207, 65.2/1200,69.5/1208,23.9/1211.25,5'
    SET @VALOR = dbo.UFN_SEPARATES_COLUMNS(@STR,3,'/')

    PRINT SUBSTRING(@VALOR,6,5)

    quinta-feira, 22 de fevereiro de 2018 14:32
  • Deleted
    quinta-feira, 22 de fevereiro de 2018 15:37
  • Bom dia cara, tudo bom?

    Isso é bem chato, mas com o tempo a gante vai pegando o jeito, primeiro segue a solução:

    declare @texto_exemplo_1 varchar(max) = '1207, 65.2/1200,69.5/1208,23.9/1211.25,5'
    declare @texto_exemplo_2 varchar(max) = '1207, 5/1200,70.5/1208,24.9/1211.25,5'
    declare @texto_exemplo_3 varchar(max) = '1207, 5875.6/1200,71.5/1208,25.9/1211.25,5'
    declare @texto_exemplo_4 varchar(max) = '1207, 6899.0/1200,72.5/1208,26.9/1211.25,5'
    
    select substring(@texto_exemplo_1,charindex('1208',@texto_exemplo_1)+5,charindex('/',substring(@texto_exemplo_1,charindex('1208',@texto_exemplo_1)+5,1000))-1)
    select substring(@texto_exemplo_2,charindex('1208',@texto_exemplo_2)+5,charindex('/',substring(@texto_exemplo_2,charindex('1208',@texto_exemplo_2)+5,1000))-1)
    select substring(@texto_exemplo_3,charindex('1208',@texto_exemplo_3)+5,charindex('/',substring(@texto_exemplo_3,charindex('1208',@texto_exemplo_3)+5,1000))-1)
    select substring(@texto_exemplo_4,charindex('1208',@texto_exemplo_4)+5,charindex('/',substring(@texto_exemplo_4,charindex('1208',@texto_exemplo_4)+5,1000))-1)
    		

    Eu fiz 4 exemplos com tamanhos de textos diferentes para garantir que funciona em cenários diferentes.

    Mas como você pode ver eu usei substring e charindex, só isso.

    Espero ter ajudado, grande abraço

    sexta-feira, 23 de fevereiro de 2018 14:39