Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cerrito

Expressões regulares no MySQL

Recommended Posts

Expressões regulares no MySQLPessoal, as expressões regulares no MySQL são uma maneira poderosa de especificar um pesquisa complexa.O MySQL usa a implementação do Henry Spencer de expressões regulares, a qual está emconformidade com o POSIX 1003.2. MySQL usa a versão extendida.Um exemplo de como podemos usar as expressões regulares:Para encontrar nomes começando com ‘m’, utilize ‘^’ para combinar com o começo do nome:mysql> SELECT * FROM clientes WHERE nome REGEXP "^m";Antes da versão 3.23.4 do MySQL, REGEXP era caso sensitivo.Ou seja se na nossa tabela o unico nome cadastrado fosse "Marcio", nossa consulta não iria retornar nadaNeste caso, para combinar letras ‘m’ maiusculas e minusculas, você utilizaria a seguinte consultamysql> SELECT * FROM clientes WHERE nome REGEXP "^[mM]";A partir do MySQL 3.23.4, se você realmente deseja forçar uma comparação REGEXP comcaso sensitivo, utilize a palavra-chave BINARY para tornar uma das strings em uma stringbinárias. Esta consulta irá combinar somente com ‘b’s minusculos no começo de um nome:mysql> SELECT * FROM clientes WHERE nome REGEXP BINARY "^m";Tambem podemos usar as expressões regulares para encontrar nomes, ou palavras terminadas com algum caracter especifico, mais ou menos assim:O coringa ‘$’ indica no final da palavra...mysql> SELECT * FROM clientes WHERE nome REGEXP "io$";Encontrando nomes que contenham um caracter especifico em qualquer parte do mesmo:mysql> SELECT * FROM clientes WHERE nome REGEXP "m"; Podemos usar as expressões para encontrar palavras com um certo numero de caracteresseis por exemplo:Caracters coringas usados:No inicio "^" e "$" no fim... E entre eles "." cada "." refere-se a uma letra, então no nosso caso ficaria assim mysql> SELECT * FROM clientes WHERE nome REGEXP "^......$";Você pode tambem escrever a consulta anterior utilizando o operador "{n}" “repete-n-vezes”:mysql> SELECT * FROM clientes WHERE nomes REGEXP "^.{5}$";Agora vamos elaborar algo um pouco mais complicado:mysql> SELECT * FROM clientes WHERE nome REGEXP M[ar]*s";intendendo o que ele faz...Procura por uma palavra que começe com "M" que tenha um numero qualquer de caracteres "a" e "r" e que termine com "s"pessoal assim que tiver tempo irei acrescentar mais exemplos de expressões regulares...abraços a todos.Marcio

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se quizer selecionar um intervalo numérico, ex: datas do dia 07 ao 13 por exemplo?

 

tente isso mas não funciona:

SELECT * FROM tabela WHERE campo REGEXP "[7-13]$";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra curiosidade...

 

A palavra REGEX pode ser trocada por RLIKE. ;)

 

 

Se o campo for DATE / DATETIME

 

Pode ser feito assim:

SELECT * FROM tabela WHERE (DAY(campo) >= 7 AND DAY(campo) <= 13)

Assim ele pega somente a parte do dia (DAY) no valor do campo e compara se é maior ou igual a sete e menor ou igual a 13.

 

Se você quiser também que seja só deste Mês e desde ano coloque:

MONTH(campo) = MONTH(CURDATE()) AND YEAR(campo) = YEAR(CURDATE())

Acrescentando a outra query...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como ficaria a string para eu buscar alguma palavra que comece com o conteudo da variável $palavra_chaveeu estava fazendoSELECT * FROM tabela WHERE '$palavra_chave%'mas não funciona, ele traza as palavras que tem a $palavra_chave no meio da palavra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.