Dica curta: Pesquisando campos com strings em mixedcase no FireBird

Esta contribuição está participando do sorteio da Mochila Targus Matrix. Envie seu texto e participe você também, você contribui com outros usuários e ainda pode faturar uma mochila novinha em folha para o seu laptop. Saiba mais sobre como participar.

Sobre o Autor:

Anderson R. Livramento

Se a sua aplicação com Firebird permite que se entre com registros em mixedcase, como por exemplo João da Silva, a instrução:

select nome from tabela where upper(nome) like ‘%JOÃO%

não funciona corretamente, porque a função UPPER não reconhece os caracteres especiais e acentuados do idioma português.

select upper(‘João da Silva’) from tabela retorna:
JOãO DA SILVA

Pesquisando no knowledge base da fundação IBPhoenix[1], descobri que o comando COLLATE não era só para usar com ORDER BY, ele pode ser usado com outros comandos também. Então:

select nome from tabela where upper(nome collate {o collate que vc usa}) like ‘%JOÃO%’

Por exemplo, usando o character set WIN1252, e o collate pxw_intl850 (a combinação mais comum) ficaria assim:

select nome from tabela where upper(nome collate pxw_intl850) like ‘%JOÃO%’

[1] http://www.ibphoenix.com