logotipo Blog Giovani Da Cruz
Banco de Dados

Primeira letra maiúscula (Title Case) no Firebird

4 min de leitura 43 visualizações

Como Calcular a Idade no SQL usando Firebird

Em muitos sistemas, é comum precisarmos padronizar textos gravados no banco de dados, especialmente descrições e nomes que chegam em letras maiúsculas ou minúsculas.

Se você utiliza Firebird 5, é possível resolver isso diretamente no banco, criando uma função interna capaz de converter qualquer texto para o formato Title Case — ou seja, com a primeira letra de cada palavra em maiúsculo e as demais em minúsculo.

 

O desafio

O Firebird possui funções como UPPER() e LOWER(), mas nenhuma função nativa que aplique a capitalização de cada palavra.
Por exemplo, não há algo como INITCAP() (presente em bancos como Oracle e PostgreSQL).

Por isso, precisamos criar nossa própria função interna PSQL, que percorre cada caractere da string, identifica o início de uma nova palavra e aplica UPPER() ou LOWER() conforme o caso.

 

Criando a função INITCAP_UTF8

A seguir está uma função compatível com Firebird 5, que trata inclusive acentos e caracteres especiais.
Ela transforma qualquer texto em formato de título, preservando a legibilidade e o padrão de escrita:

CREATE OR ALTER FUNCTION INITCAP_UTF8(TEXTO VARCHAR(255) CHARACTER SET UTF8)
RETURNS VARCHAR(255) CHARACTER SET UTF8
AS
DECLARE VARIABLE I INT;
DECLARE VARIABLE TAM INT;
DECLARE VARIABLE C CHAR(1) CHARACTER SET UTF8;
DECLARE VARIABLE RESULTADO VARCHAR(255) CHARACTER SET UTF8;
DECLARE VARIABLE PROX_MAIUSC BOOLEAN;
BEGIN
  TEXTO = TRIM(TEXTO);
  RESULTADO = '';
  PROX_MAIUSC = TRUE;
  TAM = CHAR_LENGTH(TEXTO);

  I = 1;
  WHILE (I <= TAM) DO
  BEGIN
    C = SUBSTRING(TEXTO FROM I FOR 1);

    -- Se for letra (inclusive acentuadas)
    IF (PROX_MAIUSC AND C SIMILAR TO '[A-Za-zÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕÇáéíóúàèìòùâêîôûãõç]') THEN
      RESULTADO = RESULTADO || UPPER(C);
    ELSE
      RESULTADO = RESULTADO || LOWER(C);

    -- Verifica se o próximo caractere inicia nova palavra
    IF (C IN (' ', '.', ',', ';', ':', '!', '?', '(', ')', '-', '''', '"')) THEN
      PROX_MAIUSC = TRUE;
    ELSE
      PROX_MAIUSC = FALSE;

    I = I + 1;
  END

  RETURN RESULTADO;
END;

 

Aplicando a função no seu banco

Após criar a função, você pode usá-la em qualquer comando SQL.
Por exemplo, para atualizar todos os registros de um campo:

UPDATE produto s
SET s.descricao = INITCAP_UTF8(s.descricao)
WHERE s.tipo_item = 'P';

Esse comando deixará o campo descricao com o formato adequado, tornando o conteúdo mais padronizado e agradável para o usuário.

 

Exemplos práticos

Texto original Resultado formatado
CANETA AZUL Caneta Azul
lápis DE COR Lápis De Cor
BORRACHA BRANCA Borracha Branca
CAIXA D’ÁGUA Caixa D’Água
papel-cartão Papel-Cartão

 

Por que usar funções internas no Firebird?

Nas versões mais recentes do Firebird 5, as funções SQL internas (PSQL-based) se tornaram uma ferramenta poderosa.
Elas substituem as antigas UDFs externas, permitem melhor portabilidade do banco e garantem maior segurança, já que todo o processamento é feito dentro do engine, sem depender de bibliotecas externas em C.

Além disso, funções como essa tornam a manutenção de dados muito mais simples, evitando a necessidade de scripts de pós-processamento em aplicações Delphi, .NET ou outras linguagens.

 

Outras versões

💡 Vale destacar que as Internal Functions estão disponíveis a partir do Firebird 3, o que permite integrar funções como esta diretamente ao banco.

Para quem utiliza versões anteriores, é possível adaptar a lógica criando uma Stored Procedure que percorre o texto caractere por caractere, aplicando a mesma regra de capitalização. Assim, a funcionalidade continua acessível mesmo em ambientes legados.

 

Conclusão

Com poucas linhas de código, é possível deixar seu banco de dados Firebird mais inteligente e padronizado.
A função INITCAP_UTF8 é um ótimo exemplo de como aproveitar os recursos do Firebird 5 para lidar melhor com strings em UTF-8, mantendo a integridade e a estética dos dados.

💡 Dica: se quiser deixar a função ainda mais refinada, é possível ignorar palavras curtas como “de”, “da”, “em”, aplicando capitalização apenas quando fizer sentido em títulos.

 

💬 E você?

Já precisou padronizar textos diretamente no banco de dados?
Compartilhe sua experiência ou dúvida nos comentários! 🔧💭

 

 

#Firebird #SQL #BancoDeDados

#Desenvolvimento

#GiovaniDaCruz

 

 

Deixe um comentário

Seu e-mail não será publicado.