alguém sabe como faço pra achar encontro consonantal no sql
ja procurei na net e nao achei
Selecione todas as pessoas que possuem encontro consonantal no nome.
preciso achar todas as pessoas que possuem encontro consonantal no nome na tabela
alguém pode ajudar??
Por favor, poderia me dizer depois por que alguem pediria esse tipo de consulta?
SELECT FROM `Pessoa` WHERE
`nome` LIKE '%aa%' OR
`nome` LIKE '%ae%' OR
`nome` LIKE '%ai%' OR
.
.
.
`nome` LIKE '%uu%'
tá vendo o exemplo ai acima?
Continua os 3 pontos e terá sua consulta.
Se descobrir outra coisa melhor, por favro posta aqui.
Dicas importantes:
1 - Faça um gerador de codigo para esse tipo de construção;
2 - Utilize um collation que permita acentiação e não diferenciação de maiusculas e minusculas.
Não vou lhe falar qual é a collation. Isso é obrigação sua de estudar.
[]'s
Na verdade as consoantes são: B, C, D, F…
A solução que me vem a cabeça é usar regex, no oracle você consegue usando java stored procedure, já no sql server, somente a partir da versão 2005 poderá usar a CLR (common language runtime).
Fiquei curioso também, para que pode servir uma consulta dessas?
[quote=soaresinfo]Na verdade as consoantes são: B, C, D, F…
A solução que me vem a cabeça é usar regex, no oracle você consegue usando java stored procedure, já no sql server, somente a partir da versão 2005 poderá usar a CLR (common language runtime).[/quote]
Me desculpa sr. daniferreira. o Sr. soaresinfo tem absoluta razão. Obrigado soaresinfo!
SELECT FROM `Pessoa` WHERE
`nome` LIKE '%BB%' OR
`nome` LIKE '%BC%' OR
`nome` LIKE '%BD%' OR
.
.
.
`nome` LIKE '%ZZ%'
Coloca cada consoante dentro de um array e constroi seu gerador de código utilizando esse array.
Todos os Bancos de dados atualmente já possuem o recurso de regex?
Para que serviria este tipo de consulta?
Com ficaria o exemplo?
[]'s
muito provável que é exercício de faculdade…
itera cada letra de cada linha do retorno e veja se ambas são diferentes de ‘a’, ‘e’… é mais fácil comparar ambas são não consoantes(vogais) do que se ambas são consoantes… e é mais fácil comparar ambas em separado do que juntas como se fosse um varchar só (que dariam várias possibilidades a mais).
agora por favor pessoal, não postem códigos, deixe o criador do tópico pesquisar para conseguir fazer isso…
Eu não testei, mas acho que este é um bom exemplo
SELECT * FROM nome WHERE name REGEXP '[bcdfghjklmnpqrstvxywz][bcdfghjklmnpqrstvxywz]';
fonte:
http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
Legal pra caramba isso. Não sabia que o MySQL tinha regex.
é o postgree SQL regex no postgree eu vou dar uma olhada
luis prado tentei sua consulta mais esta dando erro
olha
ERRO: erro de sintaxe em ou próximo a "REGEXP"
LINE 1: SELECT * FROM pessoa WHERE pessoa_nome REGEXP '[bcdfghjklmnp…
^
********** Erro **********
ERRO: erro de sintaxe em ou próximo a "REGEXP"
SQL state: 42601
Caracter: 40
POSTGREESQL
Eu não costumo usar o Postgre, mas pelo que entendi da explicação acho que seria algo assim:
SELECT pessoa_nome FROM pessoa WHERE name ~ '[bcdfghjklmnpqrstvxywz][bcdfghjklmnpqrstvxywz]';
fonte:
http://www.java2s.com/Code/PostgreSQL/String-Functions/Anexampleregularexpression.htm
sugiro vc buscar pelas seguintes palavras chaves juntas :
Expressão regular (E.R.) +
Postgree +
“Select * from”
http://www.google.com.br/#sclient=psy-ab&hl=pt-BR&source=hp&q=postgree+%2B+regex+%2B+"select++from%22&pbx=1&oq=postgree+%2B+regex+%2B+%22select++from%22&aq=f&aqi=&aql=&gs_sm=e&gs_upl=5653l7545l2l7905l2l2l0l0l0l0l291l523l2-2l2l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=22d8d069c072c730&biw=994&bih=496
POsta ai quando conseguir. Sua questão é muito interessante.
[]'s
essa segunda solução sua deu certo
essa segunda solução sua deu certo
Legal!
Agora eu só queria saber como fazer essa query usando o Hibernate.
Por favor, alguem se habilita?
O post do Filipe Sabella é bem interessante e parece ser a solução para o MySQL:
http://www.guj.com.br/java/204092-hibernate-com-expressao-regular
public class RegExpExpression implements Criterion {
private String property, regexp;
public RegExpExpression(String property, String regexp) {
this.property = property;
this.regexp = regexp;
}
public TypedValue[] getTypedValues( Criteria criteria, CriteriaQuery criteriaQuery ) throws HibernateException {
return new TypedValue[] { new TypedValue(Hibernate.STRING, regexp, EntityMode.POJO) };
}
public String toSqlString( Criteria criteria, CriteriaQuery criteriaQuery ) throws HibernateException {
String column = criteriaQuery.getColumnsUsingProjection(criteria, property)[ 0 ];
// return column + " REGEXP ?"; // se MySQL
return column + " ~ ?"; // se postgre?
}
}
// para usar
session.createCriteria(pessoa.class)
.add( new RegExpExpression("pessoa_nome", "[bcdfghjklmnpqrstvxywz][bcdfghjklmnpqrstvxywz]") )
.list();