Ir ao conteúdo
  • Cadastre-se
fspjonny

PHP RESOLVIDO criar um filtro diferente com uso do like no MySql

Recommended Posts

Boma dia!

 

Eu tenho um campo na tabela com esse formato: YYYY-MM-DD (2018-07-09).

 

E o seguinte filtro é passado na Query para selecionar somente o mês: LIKE '%07%'

SELECT data_nasc FROM associados WHERE data_nasc LIKE '%07%'

 

Tem como "dizer" ao LIKE que ignore o ano (YYYY) e o dia (DD) e me retorne tudo que tem o mês igual 07 (MM)?

 

Sinceramente não sei se o LIKE tem esse tipo de recurso extra ou se é somente eu não sei usar ele plenamente ainda, porque não achei essas respostas na web.

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que não seja possivel fazer deste modo, pelo mysql, pois voce tambem iria obter os resultados dos dias 07, e do ano 2007, e nao apenas dos meses , porque o like nao faz destinção entre mes, dia ou ano.

1 - voce pode criar um funcao em php que pega o valor total e usa o a funcao substr para diferenciar o mes do ano e dia.

2 - voce pode criar mais um campo na sua base com apenas meses

3 - voce tambem pode fazer um select do dia 01-07 ao dia 31-07 com comando BETWEEN do mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, YAN ALEXANDRE disse:

Acredito que não seja possivel fazer deste modo, pelo mysql, pois voce tambem iria obter os resultados dos dias 07, e do ano 2007, e nao apenas dos meses , porque o like nao faz destinção entre mes, dia ou ano.

1 - voce pode criar um funcao em php que pega o valor total e usa o a funcao substr para diferenciar o mes do ano e dia.

2 - voce pode criar mais um campo na sua base com apenas meses

3 - voce tambem pode fazer um select do dia 01-07 ao dia 31-07 com comando BETWEEN do mysql

Boa tarde Yan, é eu sei, com a mascara %07%, eu estou dizendo a query que é qualquer resultado 07 não importando a posição dele dentro da string.

No entanto imaginei que o SQL tivesse uma outra máscara de exclusão(mais refinada) imaginemos o tipo #%07%#, onde o # seria algo como: "ignore para trás ou para frente o restante da string", assim como o % faz, então na string 2018-07-09 essa máscara imaginária excluiria 2018- e -09.

 

Ok, se não existe, vou ter que ir pro braço!

 

Já tinha implementado o método de substr, mas como são centenas de registros, achei inviável ficar destrinchando e testando registro a registro, aumentando o ciclo e o consumo de memória.

 

Mas a ideia do select usando Between, é boa, eu elimino de cara o que não preciso e posso destrinchar a data em dias no mês corrente.

 

Obrigado mais uma vez Yan!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny Em vez de utilizar assim :

SELECT data_nasc FROM associados WHERE data_nasc LIKE '%07%'

tente utilizar assim :

SELECT data_nasc FROM associados WHERE data_nasc LIKE '%-07-%'

o mês é o único que fica entre os 2 traços, então acredito que não pegue o dia e nem o ano;

Editado por luscas
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 09/07/2018 às 19:06, luscas disse:

@fspjonny

tente utilizar assim :


SELECT data_nasc FROM associados WHERE data_nasc LIKE '%-07-%'

o mês é o único que fica entre os 2 traços, então acredito que não pegue o dia e nem o ano;

 

Você foi 101% acertivo, eu testei isso hoje que mexi nesse projeto, e filtra corretamente dentro da máscara que você propôs, Muito bem observado!!!

 

Muito Obrigado @luscas !

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×