none
Percorrer um campo até um caracter especificado RRS feed

  • Pergunta

  • Bom Dia!

     

    Estou precisando de uma grande ajuda!

    Tenho uma coluna na base que retorna usuarios associados a movimentos.

    Exemplo: ;andre;eduardo;antonio 

      Estou precisando fazer uma consulta que retorne somente o andre, o eduardo e antonio separadamente.

     

    Muito Obrigado pela atenção de todos!

    quarta-feira, 9 de maio de 2007 14:13

Respostas

  • vc. pode usar essa funcao

    CREATE  Function Ufn_TableArray2 (@VarArray Varchar(8000)) 
    Returns @TableArray Table (Idx Int Identity(1,1), Item varchar(50)) AS 
    BEGIN 
     
         Declare @Indice      AS int 
         Declare @IndiceArray AS int 
         Declare @VarAcum     AS nvarchar(30) 
     
         SET @VarArray = @VarArray + ',' 
         SET @VarAcum = '' 
         SET @Indice = 1 
         SET @IndiceArray = 0 
     
         WHILE @Indice <= Len(@VarArray) 
         BEGIN 
      IF Substring(@VarArray,@Indice,1) = ',' 
      BEGIN 
          INSERT INTO @TableArray (Item) VALUES (@VarAcum) 
                 SET @VarAcum = '' 
        END 
      ELSE 
      BEGIN 
          SET @VarAcum = rtrim(Convert(char(30),@VarAcum)) + rtrim(convert(char(30),Substring(@VarArray,@Indice,1))) 
      END 
      SET @Indice = @Indice+1 
         END 
    RETURN 
    END

    passe o select assim

     

    Select dbo.Ufn_TableArray2(campo) where chave = 1 entao and item = 'joao'

     

    Abs;

    quarta-feira, 9 de maio de 2007 14:57
  • muito bom seu exemplo Marcelo, apenas para facilitar sugiro que seja incluído um segundo parâmetro, assim fica fácil alterar o caracter de pesquisa. Segue abaixo as alterações.

     

     

    CREATE  Function Ufn_TableArray2 (@VarArray Varchar(8000),@Caracter char(1)) 
    Returns @TableArray Table (Idx Int Identity(1,1), Item varchar(50)) AS 
    BEGIN 
     
         Declare @Indice      AS int 
         Declare @IndiceArray AS int 
         Declare @VarAcum     AS nvarchar(30) 
     
         SET @VarArray = @VarArray + @Caracter
         SET @VarAcum = '' 
         SET @Indice = 1 
         SET @IndiceArray = 0 
     
         WHILE @Indice <= Len(@VarArray) 
         BEGIN 
      IF Substring(@VarArray,@Indice,1) = @Caracter
      BEGIN 
          INSERT INTO @TableArray (Item) VALUES (@VarAcum) 
                 SET @VarAcum = '' 
        END 
      ELSE 
      BEGIN 
          SET @VarAcum = rtrim(Convert(char(30),@VarAcum)) + rtrim(convert(char(30),Substring(@VarArray,@Indice,1))) 
      END 
      SET @Indice = @Indice+1 
         END 
    RETURN 
    END

     

     

    Espero ter ajudado

    quarta-feira, 9 de maio de 2007 15:49

Todas as Respostas

  • vc. pode usar essa funcao

    CREATE  Function Ufn_TableArray2 (@VarArray Varchar(8000)) 
    Returns @TableArray Table (Idx Int Identity(1,1), Item varchar(50)) AS 
    BEGIN 
     
         Declare @Indice      AS int 
         Declare @IndiceArray AS int 
         Declare @VarAcum     AS nvarchar(30) 
     
         SET @VarArray = @VarArray + ',' 
         SET @VarAcum = '' 
         SET @Indice = 1 
         SET @IndiceArray = 0 
     
         WHILE @Indice <= Len(@VarArray) 
         BEGIN 
      IF Substring(@VarArray,@Indice,1) = ',' 
      BEGIN 
          INSERT INTO @TableArray (Item) VALUES (@VarAcum) 
                 SET @VarAcum = '' 
        END 
      ELSE 
      BEGIN 
          SET @VarAcum = rtrim(Convert(char(30),@VarAcum)) + rtrim(convert(char(30),Substring(@VarArray,@Indice,1))) 
      END 
      SET @Indice = @Indice+1 
         END 
    RETURN 
    END

    passe o select assim

     

    Select dbo.Ufn_TableArray2(campo) where chave = 1 entao and item = 'joao'

     

    Abs;

    quarta-feira, 9 de maio de 2007 14:57
  • muito bom seu exemplo Marcelo, apenas para facilitar sugiro que seja incluído um segundo parâmetro, assim fica fácil alterar o caracter de pesquisa. Segue abaixo as alterações.

     

     

    CREATE  Function Ufn_TableArray2 (@VarArray Varchar(8000),@Caracter char(1)) 
    Returns @TableArray Table (Idx Int Identity(1,1), Item varchar(50)) AS 
    BEGIN 
     
         Declare @Indice      AS int 
         Declare @IndiceArray AS int 
         Declare @VarAcum     AS nvarchar(30) 
     
         SET @VarArray = @VarArray + @Caracter
         SET @VarAcum = '' 
         SET @Indice = 1 
         SET @IndiceArray = 0 
     
         WHILE @Indice <= Len(@VarArray) 
         BEGIN 
      IF Substring(@VarArray,@Indice,1) = @Caracter
      BEGIN 
          INSERT INTO @TableArray (Item) VALUES (@VarAcum) 
                 SET @VarAcum = '' 
        END 
      ELSE 
      BEGIN 
          SET @VarAcum = rtrim(Convert(char(30),@VarAcum)) + rtrim(convert(char(30),Substring(@VarArray,@Indice,1))) 
      END 
      SET @Indice = @Indice+1 
         END 
    RETURN 
    END

     

     

    Espero ter ajudado

    quarta-feira, 9 de maio de 2007 15:49
  • Muito obrigado pela ajuda de vocês!
    quarta-feira, 9 de maio de 2007 19:24