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

04/09/2015

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?

Augusto

Respostas

04/09/2015

Augusto

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?
Responder Citar

08/09/2015

Felipern

Bom dia,
Se vc concatenar as variáveis $dataf e $datai direto no sql não vai, sem usar to_date() ?
Responder Citar

09/09/2015

Augusto

Boa tarde Felipe,

Consegui resolver o problema.

Na verdade era porque eu não estava trabalhando com a data no formato Y-m-d
Mudei a tela do cadastro dos registros, pra imputar nesse formato, faço o select e depois na hora de retornar pro usuário eu uso esse código:

$data = explode("-",$data);
list($ano, $mes, $dia) = $data;
$data = "$dia/$mes/$ano";

Pra ficar no formato mais "bunitinho" 00/00/0000
Responder Citar