Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal estou tentando fazer uma consulta entre datas e não esta retornando nada, tenho um campo select chamado:
data1 e outro data2.
Como posso fazer isso usando BETWENN pra ele pegar entre data1 e data2 os valores
meu sql
$sql = "SELECT * FROM saida WHERE data_saida BETWEEN ( data_saida = '" . $_POST["data1"] . "' ) " ;
$sql = $sql . " AND ( data_saida = '" . $_POST["data2"] . "')";
Obrigado
usa mysql?
tem que cuidar o formato da data, seu post vem como Y-m-d ?
0000-00-00
se não vê o formato de data do teu banco.
pode ser esse o problema.
Roberto.. fiz desta forma que você falou >= e <= .. teve o mesmo resultado...
Eu uso MYSQL com esse formato Y-m-d
ai crie um campo quando o usuario digita ele vai preenchendo ex: 2010-06-01
So que ele tem que digitar ao contrario.. ai fica estranho para o usuario a gente se embanana todo estamos acustumados de uma maneira e digitando desta maneira a gente se perde legal.. teria uma forma de ele digitar dd/mm/aaaa so que na hora de comparar ele efetua a comparação ao contrário.
Ficou assim:
$sql="SELECT * FROM saida WHERE data_saida >= " ."'" . $_POST['data1'] ."'";
$sql = $sql . " AND data_saida <= " ."'" . $_POST['data2'] ."'";o correto é usar BETWEEN
SELECT * FROM teste WHERE data BETWEEN '0000-00-00' AND '0000-00-00'
e para pegar o que vem do form neste exemplo 00/00/0000
é só explodir a barra tem diversas funções na net
mas deixo uma aqui bem simples
$_POST['txt_data_fim']='26/06/2010';
$data_fim = implode('-',array_reverse(explode('/',$_POST['txt_data_fim'])));
echo $data_fim;Ou
$this->data = implode("/", array_reverse(explode("/", substr($this->data , 0, 10)))).substr($this->data , 10);
Ou
echo "Data Normal = ".$data = '24/06/2010';
function inverterDataUs($data){
$novaData = explode('/',$data);
$dia = $novaData[0];
$mes = $novaData[1];
$ano = $novaData[2];
$dataRetorno = $ano."/".$mes."/".$dia;
return $dataRetorno;
}
echo "<br>Data Invertida = ".inverterDataUs($data);
Bom...essas duas formas e tambem a do WDuarte funcionam corretamente...
E sobre
>
o correto é usar BETWEEN
SELECT * FROM teste WHERE data BETWEEN '0000-00-00' AND '0000-00-00'
Realmente o correto é usar o BETWEEN, porém...as datas de comparação dele são em campos diferentes o que dificulta o uso do BETWEEN, e isso...se for possivel usa-lo...sendo assim...recomendo usar algo do tipo
>
Porém se você quer fazer uma busca onde a consulta seja entre as datas de entrada e saida...você poderia está fazendo algo do tipo.
SELECT `teste`.`id`, `teste`.`entrada`,`teste`.`saida`
FROM `teste`
WHERE `teste`.`entrada` >= '2010/06/01'
AND `teste`.`saida` <= '2010/06/03'
Eu testei e deu certo aki Gustavo Vilas.
Abraços e boa sorte!!!
Obrigado Roberto_S_Luz e WDuarte implementei o exemplo que vocês me passaram para invereter data , e tb uso correto do BETWEEN, em ambos funcionaram certinho... agradecido pela ajuda de vocês... e mais uma vez com a ajuda do pessoal, problema solucionado http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Não sei se o BETWEEN serve para campos diferentes...ou seja... você tem data1 e data2, o BETWEEN funcionaria da seguinte forma...
Porém se você quer fazer uma busca onde a consulta seja entre as datas de entrada e saida...você poderia está fazendo algo do tipo.
Abraços...