juninnn Postado Fevereiro 27, 2009 Denunciar Share Postado Fevereiro 27, 2009 (editado) 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 Março 1, 2009 por juninnn Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Fevereiro 27, 2009 Denunciar Share Postado Fevereiro 27, 2009 tenta isso:SELECT * FROM CLIENTE WHERE Upper(NOME_CLI) LIKE ('%GERALDA%') Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 juninnn Postado Março 1, 2009 Autor Denunciar Share Postado Março 1, 2009 coloquei o upper, com GERALDA deu certo mas com Geralda não retorna nada, porque sera q isso acontece!?! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 1, 2009 Denunciar Share Postado Março 1, 2009 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 juninnn Postado Março 1, 2009 Autor Denunciar Share Postado Março 1, 2009 Já esta resolvido o problema, fiz da forma que vocês me passaram e muito obrigado.chatinho esse firebird heim :mellow: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 1, 2009 Denunciar Share Postado Março 1, 2009 (editado) 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 Março 1, 2009 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
juninnn
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:
Mas se eu colocar o nome em maísculo, ele me retorna os dados do cliente:O select esta comparando letras maíusculas com minusculas :ninja:
Podem me ajudar a resolver isso?
Agradeço.
Editado por juninnnLink para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
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.