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

Consulta, Critério, Período De Datas


Gutto

Pergunta

Os registros retornados não estão dentro do critério que eu especifiquei.

Segue o código:

$dinicial = $_GET["dinicial"];
        
            $dfinal = $_GET["dfinal"];
            
            $seleciona = "SELECT * FROM entradas WHERE data BETWEEN '" . $dinicial . "' AND '" . $dfinal . "'"; 
            //$seleciona = "SELECT * FROM entradas WHERE STR_TO_DATE(data, '%d/%m/%Y') BETWEEN '" . $dinicial . "' AND '" . $dfinal . "'";
            //$seleciona = "SELECT * FROM entradas WHERE data >= '" . $dinicial . "' AND data <= '" . $dfinal . "'";

As linhas comentadas são alternativas que usei e não deram certo.

Se o intervalo de datas informado for do mesmo mês, funciona, exemplo: 05/05/2007 a 27/05/2007, já se o intervalo informado for entre MESES DIFERENTES, exemplo: 27/05/2007 a 15/06/2007, não funciona.

Aonde estou errando?

Editado por Gutto
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Resolvi assim:

$data_ = date("d/m/Y");

$parte = explode("/", $data_);

    $data2 = $parte[2] . $parte[1] . $parte[0];
Nesse trecho usei explode pra criar arrays e separar apenas os números da variável $data_, em seguida reagrupei os valores retornados e montei uma nova variável, $data2. Se a data for 01/02/1984, ficará 19840201. Esse valor eu cadastro no BD.
$dinicial = $_POST["datainicial"];

$dfinal = $_POST["datafinal"];

$parte = explode("/", $dinicial);

    $dinicial_ = $parte[2] . $parte[1] . $parte[0];
    
    $parteB = explode("/", $dfinal);

    $dfinal_ = $parteB[2] . $parteB[1] . $parteB[0];
Uso explode nos dados recebidos via POST e crio os valores que serão analizados na cláusula SQL
$seleciona = "SELECT * FROM tabela WHERE data2 BETWEEN '" . $dinicial_ . "' AND '" . $dfinal_ . "'";

Foi a solução ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Isso significa que "data" é um campo VARCHAR e não DATE ?

Estou perguntando porque no caso de campo DATE o MySQL faz comparação de valores com strings que estejam no formato "yyyy-mm-dd", desde que corresponda a uma data válida. Além disso, o uso de tipo DATE para um campo possibilita utilizar várias funções específicas para este tipo via SQL, o que pode ser um pouco (ou muito, dependendo do caso) dificultado quando se usa campo texto para representar datas.

Vale como dica! ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Concordo com o CSML sistemas. :D Usar um campo do tipo adequado é muito importante. É melhor você fazer a alteração agora do que deixá-la para mais tarde, quando houver mais registros.

A maneira como você fez pode ser considerada como gambiarra. :P E isso pode lhe trazer problemas futuramente.

Leitura recomendada:

http://dev.mysql.com/doc/refman/5.1/en/dat...time-types.html

http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html

Mais informações:

http://dev.mysql.com/doc/mysql/search.php?...tml&lang=en

Abraços,

Beraldo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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