- 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
Postar um comentário