Como usar select firebird sem diferenciar letras maiusculas,minusculas e acentos?

pessoal, deem uma força ai!

Como usar select firebird sem diferenciar letras maiusculas,minusculas e acentos?

exemplo: para pesquisar Maria etc…, eu posso digitar maria que ira retornar maria , Maria , MariA etc… e acentos tbm, jose, josé que retorna José etc…

deem uma força ai, vlws…

app que estou usando e em Java, JDBC e BD como esta ai em cima firebird.

Tentou o operador LIKE?
Ele resolve a questão dos maiúsculos ou minúsculos.

Exemplo:

SELECT * FROM Pessoas WHERE  nome LIKE 'Maria'

O problema dos acentos, eu acredito que você poderia usar um for e String.replaceAll gerar um SQL usando OR:

SELECT * FROM Pessoas WHERE (nome LIKE 'Maria' OR nome LIKE 'Mária' OR nome LIKE 'Mària' .....)

Só uma sugestão. :wink:

[quote=visola]Tentou o operador LIKE?
Ele resolve a questão dos maiúsculos ou minúsculos.

Exemplo:

SELECT * FROM Pessoas WHERE  nome LIKE 'Maria'

O problema dos acentos, eu acredito que você poderia usar um for e String.replaceAll gerar um SQL usando OR:

SELECT * FROM Pessoas WHERE (nome LIKE 'Maria' OR nome LIKE 'Mária' OR nome LIKE 'Mària' .....)

Só uma sugestão. :wink: [/quote]

entaum, eu ja estou usando o LIKE , eu quero um operador que naum diferencie caracteres e acentos, tipo, o usuario digita no campo de texto uma palavra"Má"entaum, o sistema vai retornar maria, Maria, Marcela, marcos etc… independente se os caracteres estao com caixa alta ou baixa, ou acento, quero um operador que naum tenha sensibilidade, outro exemplo: o usuario digita luís, eu quero que apareça, Luis, luis, Luís, luis, lUis, lUís etc… naum me importa acentos ou maiusculas e minusculas, quero que apareça todos luis.

blz!!! valew pela força!

Eu achei esta apostila (em espanhol) do Firebug que fala do operador SIMILIAR TO, que aceita como argumento uma expressão regular. Não tenho o firebug aqui, então não consigo testar.

Com uma expressão regular, você poderia tentar fazer o que é proposto neste post:

Espero que ajude.

[quote=luizgomaciel]pessoal, deem uma força ai!

Como usar select firebird sem diferenciar letras maiusculas,minusculas e acentos?

exemplo: para pesquisar Maria etc…, eu posso digitar maria que ira retornar maria , Maria , MariA etc… e acentos tbm, jose, josé que retorna José etc…

deem uma força ai, vlws…

app que estou usando e em Java, JDBC e BD como esta ai em cima firebird.
[/quote]

entaum , ainda naum conseguir resolver!!!

[quote=luizgomaciel]pessoal, deem uma força ai!

Como usar select firebird sem diferenciar letras maiusculas,minusculas e acentos?

exemplo: para pesquisar Maria etc…, eu posso digitar maria que ira retornar maria , Maria , MariA etc… e acentos tbm, jose, josé que retorna José etc…

deem uma força ai, vlws…

app que estou usando e em Java, JDBC e BD como esta ai em cima firebird.
[/quote]

bom depois de tanto procurar , consegui resolver metade do meu problema, criei uma database com character set WIN1252 com collation WIN_PTBR

nesse site : http://www.destructor.de/firebird/charsets.htm

diz que esse colletion e case+accent-insensitive, blz ta td certo ta ai,

cadastrei no meu banco dois nomes , josé e josE, para testar, quando faço a pesquisa com esse codigo ai em baixo:

naum estou obtendo o resultado que espero. exemplo: quando digito j ele me devole o dois nome, ate ai td bem, mas quando digito "jose" ele so me devolve "josE" bom, funcionou o case-insensitive, mas o accent naum, outra vez quando digito josé ele so me devolve "josé" vejo que o accent-insensitive realmente naum esta funcionando, e esse charset e Brasilian Portuguese (Firebird 2.0). Case+Accent insensitive.

alguem sabe como resolver???

Aqui tem um artigo explicando como usar o collation (criar tabela e fazer selects).

Nesta lista mostra quais collations são case e accent insensitive por versão do firebird.

Isso foi o que consegui consultando meus amigos especialistas em Firebird. :wink:
Espero que ajude.

[quote=visola]Aqui tem um artigo explicando como usar o collation (criar tabela e fazer selects).

Nesta lista mostra quais collations são case e accent insensitive por versão do firebird.

Isso foi o que consegui consultando meus amigos especialistas em Firebird. :wink:
Espero que ajude.[/quote]

cara mudei td para charset UTF8 e collation UNICODE_CI_AI, e instalei firebird 2.5, ate ai funcionou quase td , so naum funciona quando digito “josé” com acento , tipo se digito jose ele retorna sem e com acento os usuarios cadastrados, como escrevi , com acento “josé” ele me retorna a mensagem "Malformed string"

tem alguma solução pra isso?

Nesse caso, talvez seja melhor você processar a string antes de mandar para a query. Remover os acentos, por exemplo.

Mas, pelo que li aqui esse problema não deveria acontecer de dentro do Java, que é tudo UTF-8.
Você chegou a rodar isso de dentro do Java? Pelo que diz no link é um problema de encoding do cliente. Tenta o usar o:

SET NAMES WIN1252;

no início do seu SQL no seu cliente para ver se funciona. Ou procurar qual é o encoding que seu windows está usando.

[quote=visola]Nesse caso, talvez seja melhor você processar a string antes de mandar para a query. Remover os acentos, por exemplo.

Mas, pelo que li aqui esse problema não deveria acontecer de dentro do Java, que é tudo UTF-8.
Você chegou a rodar isso de dentro do Java? Pelo que diz no link é um problema de encoding do cliente. Tenta o usar o:

SET NAMES WIN1252;

no início do seu SQL no seu cliente para ver se funciona. Ou procurar qual é o encoding que seu windows está usando.[/quote]

bom, como posso processar minha string, tirar o acento dela?

Existem diversas maneiras de se fazer isso, essa com certeza não é a melhor, mas é uma idéia para você começar.

		String [] nomes = {"José", "João"};
		String [][] padroes = {
				{"á", "a"},
				{"à", "a"},
				{"â", "a"},
				{"ã", "a"},
				{"é", "e"},
				{"è", "e"},
				{"ẽ", "e"},
				{"ê", "e"}
		};
		
		for (String nome : nomes) {
			String novaString = nome;
			for (String [] padrao : padroes) {
				novaString = novaString.replace(padrao[0], padrao[1]);
			}
			System.out.println(novaString);
		}