none
Duvida substring RRS feed

  • Pergunta

  • Pessoal,

     

    Tenho um campo onde preciso pegar somente os 20 primeiros caracteres, alguem sabe se existem alguma forma de não cortar a ultima palavra ou caso ela seja cortada não exibí-la?  

     

     ex.  

     


    Declare @X Varchar(30)

    Set @X= 'teste de substring'  

    Select Substring(@X,1,15)

    o retorno é: 'teste de substr'

     

    Eu precisaria trazer somente 'teste de'

    ou trazer a ultima palavra completa sem que seja cortada.

     

     

    grato,

    segunda-feira, 6 de outubro de 2008 16:32

Respostas

  • Fabiano,

     

    Não cortar a palavra, ou seja, dependendo do tamanho ela deverá aparecer ou não?

     

    Talvez, seja o caso de utilizar a função CharIndex!!!!

     

    Veja se este exemplo ajuda:

     

    Code Snippet

    Create Table #ListarNomes

    (Codigo Int Identity(1,1),

    Nome VarChar(50))

     

    Insert #ListarNomes Values('Junior Galvão')

    Insert #ListarNomes Values('Eduardo Graça')

    Insert #ListarNomes Values('Fernanda Galva')

    Insert #ListarNomes Values('João Silva Galvez')

    Insert #ListarNomes Values('Marcio de Jesuita Gernando')

    Insert #ListarNomes Values('Marcio de Jnoas Belo de Garcia')

     

    Declare @PosicaoEspaco Int,

            @Contador Int,

            @NomeFormatado VarChar(50)

     

    Set @Contador=0

     

    While @Contador <= (Select Count(*) from #ListarNomes)

     Begin

      Set @PosicaoEspaco=(Select PatIndex('% %',Nome) From #ListarNomes Where Codigo =  @Contador)

     

      Select @NomeFormatado=Upper(Substring(Nome,1,1))+SubString(Nome,2, @PosicaoEspaco-1)+

             Upper(SubString(Nome,@PosicaoEspaco+1,1))+SubString(Nome,@PosicaoEspaco+2,

             Len(Nome))

      From #ListarNomes

      Where Codigo = @Contador

     

      Print 'Nome do Usuário formatado -->:'+@NomeFormatado

     

      Set @Contador = @Contador + 1

    End

     

     

    segunda-feira, 6 de outubro de 2008 16:43
  •  

    usando o exemplo do junior veja se ajuda

     

     


    Create Table #ListarNomes

    (Codigo Int Identity(1,1),

    Nome VarChar(50))

     

    Insert #ListarNomes Values('Junior Galvão')

    Insert #ListarNomes Values('Eduardo Graça')

    Insert #ListarNomes Values('Fernanda Galva')

    Insert #ListarNomes Values('João Silva Galvez')

    Insert #ListarNomes Values('Marcio de Jesuita Gernando')

    Insert #ListarNomes Values('Marcio de Jnoas Belo de Garcia')

     

    ---

     

    Select Substring(Nome,1,Charindex(' ',Nome, 15-PatIndex ('% %', Nome)))
    from #ListarNomes

     

    Abs/

    segunda-feira, 6 de outubro de 2008 17:03

Todas as Respostas

  • Fabiano,

     

    Não cortar a palavra, ou seja, dependendo do tamanho ela deverá aparecer ou não?

     

    Talvez, seja o caso de utilizar a função CharIndex!!!!

     

    Veja se este exemplo ajuda:

     

    Code Snippet

    Create Table #ListarNomes

    (Codigo Int Identity(1,1),

    Nome VarChar(50))

     

    Insert #ListarNomes Values('Junior Galvão')

    Insert #ListarNomes Values('Eduardo Graça')

    Insert #ListarNomes Values('Fernanda Galva')

    Insert #ListarNomes Values('João Silva Galvez')

    Insert #ListarNomes Values('Marcio de Jesuita Gernando')

    Insert #ListarNomes Values('Marcio de Jnoas Belo de Garcia')

     

    Declare @PosicaoEspaco Int,

            @Contador Int,

            @NomeFormatado VarChar(50)

     

    Set @Contador=0

     

    While @Contador <= (Select Count(*) from #ListarNomes)

     Begin

      Set @PosicaoEspaco=(Select PatIndex('% %',Nome) From #ListarNomes Where Codigo =  @Contador)

     

      Select @NomeFormatado=Upper(Substring(Nome,1,1))+SubString(Nome,2, @PosicaoEspaco-1)+

             Upper(SubString(Nome,@PosicaoEspaco+1,1))+SubString(Nome,@PosicaoEspaco+2,

             Len(Nome))

      From #ListarNomes

      Where Codigo = @Contador

     

      Print 'Nome do Usuário formatado -->:'+@NomeFormatado

     

      Set @Contador = @Contador + 1

    End

     

     

    segunda-feira, 6 de outubro de 2008 16:43
  •  

    usando o exemplo do junior veja se ajuda

     

     


    Create Table #ListarNomes

    (Codigo Int Identity(1,1),

    Nome VarChar(50))

     

    Insert #ListarNomes Values('Junior Galvão')

    Insert #ListarNomes Values('Eduardo Graça')

    Insert #ListarNomes Values('Fernanda Galva')

    Insert #ListarNomes Values('João Silva Galvez')

    Insert #ListarNomes Values('Marcio de Jesuita Gernando')

    Insert #ListarNomes Values('Marcio de Jnoas Belo de Garcia')

     

    ---

     

    Select Substring(Nome,1,Charindex(' ',Nome, 15-PatIndex ('% %', Nome)))
    from #ListarNomes

     

    Abs/

    segunda-feira, 6 de outubro de 2008 17:03
  • Obrigado pela ajuda, assim dá certo.

     

    grato.

    segunda-feira, 6 de outubro de 2008 17:52