locked
Consulta Sql: Converter primeira letra da string para maiúscula RRS feed

  • Pergunta

  •  Olá pessoal,

     

    gostaria de saber se existe maneira de passar o primeiro caractere de uma string do banco para maiúscula

     

    Ex. Select nm_customer From Customer Where cd_customer = 1

    Retorno: 'ANTONIO CARLOS'.

    Mas na verdade eu queria que aparecesse: 'Antonio Carlos'.O lower não dá para usar pois passa todos os caracteres para minúsculo.

     

    Agradeço desde já,

     

    Diego A.

    quarta-feira, 10 de outubro de 2007 12:08

Respostas

  •  

    De uma olhdada se ajuda?:

     

    create Function Ufn_FirstCapital (@String Varchar(5000))
    Returns Varchar(5000)
    Begin

       Declare @RetornoString Varchar(5000)
       Declare @Start Int, @end Int
       Select @Start = 2, @end = Len(@String)
       Select @RetornoString = Upper(Left(@String,1))
       While @start <= @End
       Begin
         If substring(@String,@Start,1) = ' '
         Begin
            Select @Start = @start + 1
            Select @RetornoString = @RetornoString + ' ' + Upper(substring(@String,@Start,1))
         End
         Else
         Begin
           Select @RetornoString = @RetornoString + substring(@String,@Start,1)
         End
         Select @Start = @start + 1
       End
    Return @RetornoString
    End

    Declare @nome varchar(50)

    select @nome = 'marcelo colla'
    Select dbo.Ufn_FirstCapital(@nome)

    -- agora veja se vc. nao quer colocar como maiscula dos de da tipo antonio da silva Antorni da Silva , ai precisa alterar um pouco a funcao, qualquer coisa retorne.
    quarta-feira, 10 de outubro de 2007 12:34
  • Diego,

     

    Veja este exemplo:

     

    Code Block

    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

     

     

    quarta-feira, 10 de outubro de 2007 13:46

Todas as Respostas

  •  

    De uma olhdada se ajuda?:

     

    create Function Ufn_FirstCapital (@String Varchar(5000))
    Returns Varchar(5000)
    Begin

       Declare @RetornoString Varchar(5000)
       Declare @Start Int, @end Int
       Select @Start = 2, @end = Len(@String)
       Select @RetornoString = Upper(Left(@String,1))
       While @start <= @End
       Begin
         If substring(@String,@Start,1) = ' '
         Begin
            Select @Start = @start + 1
            Select @RetornoString = @RetornoString + ' ' + Upper(substring(@String,@Start,1))
         End
         Else
         Begin
           Select @RetornoString = @RetornoString + substring(@String,@Start,1)
         End
         Select @Start = @start + 1
       End
    Return @RetornoString
    End

    Declare @nome varchar(50)

    select @nome = 'marcelo colla'
    Select dbo.Ufn_FirstCapital(@nome)

    -- agora veja se vc. nao quer colocar como maiscula dos de da tipo antonio da silva Antorni da Silva , ai precisa alterar um pouco a funcao, qualquer coisa retorne.
    quarta-feira, 10 de outubro de 2007 12:34
  • Diego,

     

    Veja este exemplo:

     

    Code Block

    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

     

     

    quarta-feira, 10 de outubro de 2007 13:46
  •  

    Obrigado Marcelo,

    funcionou perfeitamente, estou usando o seu exemplo.

     

    Obrigado também Júnior, o seu também funcionou.

     

    Diego A.

    quarta-feira, 10 de outubro de 2007 14:16
  • Diego,

     

    Obrigado pelo retorno.

    quarta-feira, 10 de outubro de 2007 16:42
  • Para essa função do Marcelo ficar perfeita só colocar a linha em negrito na função para não precisar se preocupar se a string vem com lower e upper case mixados:


    Ufn_FirstCapital (@String Varchar(5000))
    Returns Varchar(5000)
    Begin
    Set @String = Lower(@String )
    Declare @RetornoString Varchar(5000)
     

    quarta-feira, 6 de janeiro de 2010 09:51
  • Cleber,

    Por gentileza, não temos o habito de responder mensagens muito antigas, para evitar poluição de post no fórum.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 6 de janeiro de 2010 23:10