Jump to content
Fórum Script Brasil
  • 0

Select para buscar um intervalo entre hoje e seis meses atrás - PHP/MYSQL


Allgusto
 Share

Question

Boa noite pessoal,

Preciso fazer um select no bd que busque os registros com status "pendente" que foram imputados num intervalo de 6 meses atrás até o dia atual.

Para tal, utilizei o seguinte código:

<? 
$dataf=date('d/m/Y');
$datai=date('d/m/Y', strtotime('-6 months'));
/* testando o resultado das variaveis */
echo "Data de hoje: " .$dataf. "  Data de seis meses atrás:  " .$datai. "";
?>

Até então beleza, retornou as datas corretamente.
No meu banco de dados tenho a data que o registro foi feito.
Dessa forma eu busco com o seguinte select:

$sql= "SELECT * FROM registros WHERE campo= '$variavel' and status = 'pendente' and data between to_date('&dataf','%d/%m/%Y') AND to_date('&datai','%d/%m/%Y')"; 


Usando o to_date retorna erro de sql
Usando date_format ele não retorna erro, mas também não busca o valor.

o campo data no banco tá com o formato DD/MM/AAAA

Poderiam me auxiliar?

 

Detalhe: Rodei o sql direto no banco, e retornou o resultado correto.

SELECT * FROM registros WHERE campo = '1' and status = 'pendente' and data between ('04/03/2015') AND ('04/09/2015')

O que mostra que o problema está na formatação da data na variável, o que devo alterar?

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Troque &datai por $datai

e &dataf por $dataf

 

Troque &datai por $datai

e &dataf por $dataf

 

Nooooo chega a dar até raiva, tu revira o código todo mas num enxerga um detalhezinho desse, esteve certo uma vez, de tanto alterar, acabei mudando isso.

 

Fiz a alteração, o sql retornou resultado, mas incorreto.

 

dei um echo no sql, e ficou assim:

SELECT * FROM registros as r, institutos as i WHERE r.instituicao = '1' and r.status = 'pendente' and r.instituicao= i.id and r.data between '07/03/2015' AND '07/09/2015'

 

No banco eu tenho 5 registros, para a mesma instituição (id=1) com 5 datas diferentes:

registro 1: 04/01/2015

registro 2: 04/08/2015

registro 3: 05/01/2014

registro 4: 05/09/2015

registro 5: 07/09/2015

 

Se o intervalo é between '07/03/2015' AND '07/09/2015'

Era pra retornar os registros 2,4 e 5? Correto?

Porém só retorna 5

Alguma ideia?

Link to comment
Share on other sites

  • 0

Olá! Para trabalhar  com datas no mysql, seus campos de data devem ser do tipo DATE ou TIMESTAMP. Tente com as datas no formato padrão do sql: ano-mês-dia

...   r.data between '2015-03-07' AND '2015-09-07'

Edited by lowys
Link to comment
Share on other sites

  • 0

Acabei de achar aqui cara, já ia responder que encontrei a solução, obrigado pela atenção!

Eu tava gravando a data no banco no padrão dd/mm/aaaa

Alterei pra yyyy-mm-dd 

e mudei o código pra 

$dataf=date('Y-m-d');
$datai=date('Y-m-d', strtotime('-6 months'));

 

Agora só vou formatar a data na hora de imprimir pro usuário. 

Vlw!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.1k
×
×
  • Create New...