Achar encontro consonantal no sql

13 respostas
D

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??

13 Respostas

L

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

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).

L

Fiquei curioso também, para que pode servir uma consulta dessas?

L

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).

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

M

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…

L

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.

D

é o postgree SQL regex no postgree eu vou dar uma olhada

D

luis prado tentei sua consulta mais esta dando erro

D

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

L

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

D
essa segunda solução sua deu certo

essa segunda solução sua deu certo

L

Legal!

Agora eu só queria saber como fazer essa query usando o Hibernate.
Por favor, alguem se habilita?

L

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();
Criado 27 de novembro de 2011
Ultima resposta 28 de nov. de 2011
Respostas 13
Participantes 5