Ir para conteúdo
Fórum Script Brasil
  • 0

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


Allgusto

Pergunta

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 para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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'

Editado por lowys
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...