Função Para Transformar Texto no Padrão Pascal Case (Pri.Maiuscula) no SQL Server

Fala pessoal,


    Esse artigo tem como objetivo apresentar a vocês uma maneira de realizar o tratamento de textos, onde é necessário colocar a primeira letra de cada palavra em maiúscula. 

          Em outras palavras, estamos falando do padrão PascalCase, cuja a definição é exatamente o que precisamos.  Esse padrão também conhecido como “upper camel case” ou “capital case”, pascal case combina palavras colocando todas com a primeira letra maiúscula, conforme exemplo a seguir:

      • Texto: Um exemplo do padrão pascal case.
      • Texto Formatado: Um Exemplo do Padrão Pascal Case

          Quando estamos trabalhando com alguma ferramenta de BI, naturalmente nos deparamos com a necessidade de realizar transformações e/ou tratamento dos dados, ou seja, a realização do ETL (Extract, Transform e Load).

          Durante esse trabalho de transformação e padronização das bases de dados, surge a necessidade de utilizar algumas funções para facilitar o trabalho.

          Importante destacar que, existem inúmeras formas de fazer esse processo, ou seja, não tem certo ou errado, desde que o resultado e performance seja aderente ao seu cenário. 
          

      Por isso, apresento a vocês um script para a criação de uma função personalizada no SQL que utilizo em meus projetos e atende a necessidade.


      CREATE FUNCTION FN_PriMaiuscula(@pTexto VARCHAR(4000))


      RETURNS VARCHAR(4000)

      AS

      BEGIN
      --Declarando Variáveis
      DECLARE @POSICAO INT = 1
      DECLARE @CHAR CHAR(1)
      DECLARE @CHAR_ANTERIOR CHAR(1)
      DECLARE @CHAR_POSTERIOR CHAR(1)
      DECLARE @CHAR_POS CHAR(1)
      DECLARE @NOME_FORMATADO CHAR(100) = LOWER(@pTexto)

      --Looping em cada caracter do texto do parâmetro da função
      WHILE @POSICAO <= LEN(@pTexto)
      BEGIN
      --Atribuição de dados nas variáveis
      SET @CHAR = SUBSTRING(@pTexto, @POSICAO, 1) --Pega o caracter atual
      SET @CHAR_ANTERIOR = CASE WHEN @POSICAO = 1 THEN ' '
      ELSE SUBSTRING(@pTexto, @POSICAO - 1, 1) --Pega o primeiro caracter imediatamente anterior ao atual
      END
      SET @CHAR_POS = SUBSTRING(@pTexto, @POSICAO + 1, 1) --Pega o primeiro caracter posterior ao atual
      SET @CHAR_POSTERIOR = SUBSTRING(@pTexto, @POSICAO + 2, 1) --Pega o segundo caracter posterior ao atual
      --Faz as verificações para formatar o caracter
      IF @CHAR_ANTERIOR IN(' ')
      BEGIN 
      IF @CHAR_POSTERIOR IN(' ')
      BEGIN
      SET @NOME_FORMATADO = STUFF(@NOME_FORMATADO, @POSICAO, 1, LOWER(@CHAR))
      END
      ELSE
      BEGIN
      IF @CHAR_POS IN(' ')
      BEGIN
      SET @NOME_FORMATADO = STUFF(@NOME_FORMATADO, @POSICAO, 1, LOWER(@CHAR))
      END
      ELSE 
      BEGIN
      SET @NOME_FORMATADO = STUFF(@NOME_FORMATADO, @POSICAO, 1, UPPER(@CHAR))
      END
      END
      END 
      SET @POSICAO = @POSICAO + 1
      END

      RETURN @NOME_FORMATADO

      END


          Após ter realizado a criação da função no seu ambiente, a utilização da mesma é bastante simples. A seguir apresento um exemplo da utilização da função em um sript para consulta do cadastro de clientes.

      SELECT
            A.CodCliente
          , ISNULL( dbo.FN_PriMaisucula(A.NomeCliente), 'Não Informado') AS NomeCliente
          , ISNULL( dbo.FN_PriMaisucula(A.NomeFantasia), 'Não Informado') AS NomeFantasia
      FROM Clientes AS A

          Note que utilizei a função personalizada dentro da função nativa ISNULL para o tratamento, caso algum cliente esteja sem nome (nulo).


          Espero que esse conteúdo ajude de alguma forma.

      Forte abraço.

      Comentários