Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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...
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.
Exemplo:
"SELECT * FROM tabela WHERE campo REGEXP '^". $palavra_chave ."'
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]$";