[firebase-br] Like - Case insensitive

Fabrício Fadel Kammer ffkammer em conchalnet.com.br
Qui Dez 4 10:36:24 -03 2008


Bom dia Sandro, obrigado pela sua resposta, eu sabia que a versão 2 do 
FB permite experessões em índices, mas no momento migrar os bancos para 
essa versão sempre que atualizar um cliente me causará muitos 
transtornos, então estou procurando uma solução que permita a busca sem 
a migração do banco.

Abraços


Sandro Souza escreveu:
> Bom dia/tarde Fabrício.
>
> Nas versões mais novas do Firebird, você já pode criar índices baseados em
> expressões.
>
> Sendo assim, você pode, por exemplo, criar um índice baseado na expressão
> UPPER(NOME) e ele será utilizado nesse caso que você informou.
>
> Usando o próprio "isql.exe", vamos criar um exemplo.
>
> Primeiro vamos "logar" no isql como "sysdba", senha "masterkey" e dialeto 3.
>
> isql -u sysdba -p masterkey -s 3
>
> Use CONNECT or CREATE DATABASE to specify a database
> SQL>
>
> Conectando em um banco de testes...
>
> SQL>connect teste;
> Database:  teste, User: sysdba
> SQL>
>
> Criando a nossa tabela de exemplo...
>
> SQL>create table teste (nome varchar(30) not null);
>
> Acrescentando alguns registros...
>
> SQL>insert into teste values('joão');
> SQL>insert into teste values('JoÃo');
> SQL>insert into teste values('jOãO');
> SQL>insert into teste values('JOÃO');
>
> Efetivando a transação...
>
> SQL>commit;
>
> Verificando se os dados realmente foram salvos...
>
> SQL>select * from teste;
>
> NOME
> ==============================
> joão
> JoÃo
> jOãO
> JOÃO
>
> Ativando a exibição dos planos de acesso...
>
> SQL>set plan on;
>
> Criando o índice baseado em uma expressão...
>
> SQL>create index *ix_teste* on teste *computed by (upper(nome))*;
>
> Efetuando a seleção de dados pelas iniciais do nome...
>
> SQL>select * from teste where upper(nome) like 'JO%';
>
> *PLAN (TESTE INDEX (IX_TESTE))*
>
> NOME
> ==============================
> joão
> JoÃo
> jOãO
> JOÃO
>
> Dessa forma, o índice criado é utilizado.
>
> Espero ter ajudado mais que atrapalhado. :D
>
> 2008/12/4 Fabrício Fadel Kammer <ffkammer em conchalnet.com.br>
>
>   
>> Bom dia pessoal,
>>
>> Hoje para poder usar o comando LIKE sem diferenciar maiúsculas de
>> minúsculas acrescento o um Upper na condição, conforme sql abaixo:
>>
>> SELECT NOME FROM CLIENTES WHERE UPPER(NOME) LIKE 'JO%'
>>
>> Isso faz com que o LIKE retorne TODOS os clientes cujo nome inicie com
>> "JO", porém o Firebird não utiliza índices nessa busca. Gostaria de saber
>> com os colegas se há como eu fazer o like não diferenciar maiúsculas de
>> minúsculas, obrigando assim o Firebird a usar o índice do campo nome e
>> ganhar performance nessa SQL?
>>
>> Queria fazer algo como abaixo:
>>
>> SELECT NOME FROM CLIENTES WHERE NOME LIKE 'JO%'
>>
>> E o Firebird deveria retornar todos registros abaixo:
>> Joao
>> JOao
>> JOAO
>> Jose
>> JOSE
>> JOsE
>> etc
>>
>> Grato desde já
>>
>> Fabrício
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>     
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>   





Mais detalhes sobre a lista de discussão lista