Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido)Select like Firebird


juninnn

Pergunta

Estou fazendo uma aplicação em C# windows form, tenho um select que não retorna os dados da maneira que eu queria.

No banco tenho um cliente cadastrado com nome todo maísculo 'GERALDA' e quando utilizo este select ele não retorna nada:

SELECT * FROM CLIENTE WHERE NOME_CLI LIKE ('%Geralda%')
Mas se eu colocar o nome em maísculo, ele me retorna os dados do cliente:
SELECT * FROM CLIENTE WHERE NOME_CLI LIKE ('%GERALDA%')

O select esta comparando letras maíusculas com minusculas :ninja:

Podem me ajudar a resolver isso?

Agradeço.

Editado por juninnn
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
coloquei o upper, com GERALDA deu certo mas com Geralda não retorna nada, porque sera q isso acontece!?!
Isso acontece simplesmente porque a comparação é case-sensitive, ou seja, diferencia letras maiúsculas de minúsculas.

A função Upper retorna para a comparação, o conteúdo de NOM_CLI com todas as letras maiúsculas. Para a comparação ser verdadeira, do outro lado da igualdade, o valor a ser comparado também deverá estar nesta condição para que o resultado seja verdadeiro.

Então, você tem que comparar os dois lados usando o mesmo "padrão".

Seguindo o exemplo do colega Kuroi, você poderia fazer deste modo:

SELECT * FROM CLIENTE WHERE Upper(NOME_CLI) LIKE Upper('%Geralda%')
Mas, na prática, como você está introduzindo a "Geralda" na consulta via programação (será constante para o banco), seria mais conveniente que você usasse a função de conversão da linguagem de programação antes de montar a string de consulta. Isso irá poupar trabalho do SGDB que terá que chamar a função apenas para o campo NOME_CLI, ou seja, uma vez para cada linha da tabela sendo comparada. C# não é minha praia, mas seria algo parecido com isto:
...
string StringSQL, NameToSearch;

NameToSearch = edtNameToSearch.Text;
NameToSearch.ToUpper();
StringSQL = String.Format("SELECT * FROM CLIENTE WHERE Upper(NOME_CLI) LIKE Upper('%{0}%')", NameToSearch);
...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
chatinho esse firebird heim :mellow:
ele é como a maioria dos SGBD - não tem nada a ver com tabelas paradox, DBF e Access. ;)

Procure estudá-lo e vai encontrar algumas coisas interessantes.

Na sua configuração, usando % em ambos os lados, não será feito uso de indice. Mas vamos supor que sua busca fosse para nomes que começassem com GERALDA, então a sua consulta ficaria:

SELECT * FROM CLIENTE WHERE Upper(NOME_CLI) LIKE ('GERALDA%')
Voce pode cria um índice para a tabela cliente onde informa que usará UPPER(NOME_CLI) e não apenas o nome do campo NOME_CLI (como é o usual). O SQL de criação seria algo assim:
CREATE INDEX NOME_UPPER ON CLIENTE COMPUTED BY (UPPER(NOME_CLI));

Agora, a consulta acima, faria uso deste índice.

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...