Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hooligans

problema com busca entre datas

Recommended Posts

galera seguinte peguei um trabalho pra terminar(pegar coisa pela metade é f*** ) enfim preciso fazer busca entre datas e tá dificil aki o código que está do antigo programador é esse

 

** o campo é varchar rs

 

$data_ini = $_POST['date_ini'];
$data_fim = $_POST['date_fim'];
$tipo_doc = $_POST['tipo_doc'];
$ab_fe = $_POST['ab_fe'];

$sql  = "SELECT *,str_to_date(Data_pg, '%d/%m/%Y') FROM contas_receber WHERE Data_pg between '$data_ini' and '$data_fim' and Pg = '$ab_fe' group by num_rec ORDER by Data_pg ASC";

grato pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou o str_to_date no WHERE.. tentae e diz se funcionou

 

$sql  = "SELECT *,str_to_date(Data_pg, '%d/%m/%Y') FROM contas_receber WHERE (str_to_date(Data_pg, '%d/%m/%Y') between '$data_ini' and '$data_fim') and Pg = '$ab_fe' group by num_rec ORDER by Data_pg ASC";

[x]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

deu isso

 

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Data_pg between '01/07/2008' and '05/08/2008' and Pg = '1' group by num_rec ORDE' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca só

 

$sql  = "SELECT *,str_to_date(Data_pg, '%d/%m/%Y') FROM contas_receber WHERE str_to_date(Data_pg, '%d/%m/%Y') between '$data_ini' and '$data_fim'";

pra ver se é esse o problema..

 

outra coisa, qdo você aplica o str_do_date, o campo vira date (aaaa-mm-dd) então você tem q tratar $data_ini e $data_fim para ir no formato mysql

 

testae e fala se funcionou

 

[x]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum naum deu ,como assim tratar os campos,explode e talz lá ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se compara data no formato brasileiro senhores 00/00/0000, qual o motivo para usar campo VARCHAR ? nossa...

 

porque que não usa o correto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se compara data no formato brasileiro senhores 00/00/0000,

poisé, por isso do uso str_to_date no WHERE e também por isso q falei pra tratar $data_ini e $data_fim para ir no formato mysql

 

qual o motivo para usar campo VARCHAR ? nossa... porque que não usa o correto ?

pelo q entendi o hooligans pegou o sistema pra "remendar" e já tava feito desse jeito..

 

Mas essa query que postei não era pra dar erro..

$sql  = "SELECT *,str_to_date(Data_pg, '%d/%m/%Y') FROM contas_receber WHERE str_to_date(Data_pg, '%d/%m/%Y') BETWEEN '".$data_ini."' AND '".$data_fim."'";
hooligans posta o erro que tá dando só com essa query aí...

 

em tempo, para funcionar o str_to_date, os registros (datas em varchars) do seu campo Data_pg tem que estar escritas dd/mm/yyyy

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alaerte eu tbm uso o date mais como peguei o B.O. já feito naum tem como mudar entende

 

$sql  = "SELECT *,str_to_date(Data_pg, '%d/%m/%Y') FROM contas_receber WHERE Data_pg between '$data_ini' and '$data_fim' and Pg = '$ab_fe' group by num_rec ORDER by Data_pg ASC  ";

 

entaum com esse código ele naum está fazendo a consulta entre as datas se eu deixar em branco os campos aparece agora se eu colocar ai fala que naum tem nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql  = "SELECT *,str_to_date(Data_pg, '%d/%m/%Y') FROM contas_receber WHERE (str_to_date(Data_pg, '%d/%m/%Y') between '1950-02-02' and '2008-08-05') and Pg = '$ab_fe' group by num_rec ORDER by Data_pg ASC";

coloca com esses valores, veja se sai resultado..

 

aproveita tbem e fala um registro var que existe hoje na tabela Data_pg

 

[x]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum amigo oq acontece é que no banco de dados como o campo é varchar ele naum pega "2008-08-05" e sim "05/08/2008"

 

 

entaum mesmo assim teria que converter com o str_to_date(Data_pg, '%d/%m/%Y') ,creio eu que se naum for assim ele naum vai reconhecer como data para fazer as buscas pela data ,estou certo ou errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, no teu campo varchar Data_pg os dados estão 05/08/2008 , confere?

 

a função str_to_date do mysql recebe dois parâmetros (string, formato_que_a_string_está) e converte para o formato date aaaa-mm-dd

 

para conferir, basta executar essa query SELECT STR_TO_DATE('05/08/2008', '%d/%m/%Y'); e o resultado será 2008-08-05

 

Por isso na condição (where) da tua query, você tem q converter o campo Data_pg (pra date) e verificar se o mesmo está entre as datas (data_ini e data_fim) no formato mysql (aaaa-mm-dd).

 

você deve estar fazendo alguma coisa errada ou então faltou você nos colocar mais informações pra solucionar teu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim... creio que funcione...

 

$sql = "select * from contas_receber where (str_to_date >= '${data_ini}' AND str_to_date <= '${data_fim}')";

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim... creio que funcione...

 

$sql = "select * from contas_receber where (str_to_date >= '${data_ini}' AND str_to_date <= '${data_fim}')";

 

flw

str_to_date é função amigo e não um campo da tabela.. isso não vai funcionar não

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpa sou meio leigo ainda...

 

então verifica se fica melhor..

 

 

$sql = "select * from contas_receber where (data >= '${data_ini}' AND date <= '${data_fim}')";

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.