Ir para conteúdo
Rafael Freitas

Verificar se a data de um determinado campo é menor que a data atual 3 meses

Recommended Posts

Boa tarde galera!

Estou tentando fazer o seguinte:

   Eu quero que a consulta do Mysql mostre somente os campos em que a data do "ultimo_laudo" seja 3 meses menor que a data atual.

 

Ainda não tenho muito conhecimento, então relevem =)

 

Estou tentando fazer assim:

$busca = "SELECT * FROM anuncios WHERE ultimo_laudo < CURRENT_DATE() -90";

Agradeço a atenção! o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael, tudo bem?

 

Sua ideia foi boa, mas você não está mantendo uma unidade para se comunicar com o banco (no caso, dias).

O que eu quero dizer é que ultimo_laudo é um date (Y-m-d) provavelmente, daí você chama o CURRENT_DATE() que também vai retornar um date, e depois você coloca o -90 solto. A falha está nessa imprecisão.

 

Você poderia fazer assim (é apenas uma das várias formas de se fazer isso, pois existem muitas funções relacionadas a datas no Mysql):

WHERE ultimo_laudo BETWEEN CURDATE() - INTERVAL 90 DAY AND CURDATE()

Veja: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

 

Mas eu particularmente prefiro sempre manter o máximo de lógica e processamento dentro da aplicação, nesse caso mandando diretamente a data calculada para dentro da consulta. Exemplo:

WHERE ultimo_laudo BETWEEN '2018-08-03' AND '2018-11-01'

Você não concorda que fica mais legível?

 

Não sei qual sua linguagem de programação, mas vou te dar um exemplo para fazer isso no PHP:

<?php
$sql = 'SELECT BLA BLA BLA';// Início da instrução SQL, apenas para fins didáticos

$sql .= sprintf(
    " WHERE ultimo_laudo BETWEEN '%s' AND '%s'",
    ( new DateTime( '-90 days' ) )->format( 'Y-m-d' ),
    ( new DateTime( 'today' ) )->format( 'Y-m-d' )
);

echo $sql;
// Retorno: SELECT BLA BLA BLA WHERE ultimo_laudo BETWEEN '2018-08-03' AND '2018-11-01'

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Matheus,

Obrigado pela ajuda brother.

 

Assim, dessa primeira forma:

WHERE ultimo_laudo BETWEEN CURDATE() - INTERVAL 90 DAY AND CURDATE()

Eu entendo que ele irá exibir os registros que tiverem a data "ultimo_laudo" dentro de um intervalo de 3 meses.

Porém, o que eu precisava era que ele exibisse os que estiverem com a data menor ou igual a 3 meses pra trás.

Entende? Não sei se estou me expressando corretamente.

 

Por exemplo, eu tenho um registro com data 30/08/2018 (à 3 meses atrás) ou ainda que a data fosse mais antiga. Preciso que esse seja exibido.

e outro registro com data 20/10/2018 por exemplo. Ainda não fez 3 meses de vencido, então esse não apareceria.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim, falha minha... dessa forma é bem mais simples.

Seria assim:

WHERE ultimo_laudo < '2018-08-03'

Ou, caso você não deseje pré-calcular a data:

WHERE ultimo_laudo < CURDATE() - INTERVAL 90 DAY

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por GustavoJacob15
      tenho um case assim no meu fonte: 
      ---------------------------------------------------------
      CASE RA_DEMISSA
          WHEN '' THEN 'DESLIGADO'
          ELSE 'ATIVO'
      END AS SITUACAO
      ---------------------------------------------------------
       
      Preciso colocar no where para mostar um parametro com 'ativo' ou 'desligado' 
       
    • Por JOSELUISALD
      Bom dia. Em minha aplicação o cliente quer uma cópia de seu sistema localmente e remoto (hospedado). Tem como eu fazer a sincronização dos bancos de dados, para que tudo que seja feito localmente seja inserido automaticamente no banco remoto? Desde já obrigado.
    • Por Caio_Lourençon
      Olá estou desenvolvendo um projeto utilizando a extensão MySQLi, e nisso aproveitando para utilizar algumas funções orientada a objeto! Gostaria de tirar umas dúvidas em relação a listagem de dados, são duas perguntas:   1) Utilizar a função foreach() ao invés de um while() com a função fetch_array() dentro, tem uma listagem mais rápida ou mais lenta? Pois com ambas consigo trazer os dados, No momento estou utilizando a foreach por ser mais rápida de se digitar.
      2) Utilizo muitas listagens de tabelas diferentes na mesma página sempre chamando um novo SELECT, seria melhor criar uma função com um SELECT dentro para eu sempre reutiliza-lá ou não iria mudar muita coisa em questão de desempenho?
       
      Agradeço qualquer informação.
    • Por gersonab
      Procuro uma revenda de hospedagem confiável, ja adianto que uolhost e locaweb estão fora dos planos.
    • Por Jefferson andre
      Ola, estou criando um contador de acessos diario mas nao funciona, a tabela tem o campo data no formato date e o campo contador int(10)
       
      A ideia eh verificar a data e se nao existir incluir na tabela, se existir adicionar ao contador
       
      Parece que o erro esta no formato da data, nem manualmente consigo incluir na tabela via localhost ou na hospedagem da google
       
      Agradeço qualquer ajuda
       
      <?php // fazendo uma conexão com o banco de dados include("conexao.php"); // grava a data atual em uma variavel date_default_timezone_set('America/Sao_Paulo'); $date = date('d-m-Y'); //$sql = "SELECT codigo FROM contador"; $resultado = $arquivo->query("SELECT data,contador FROM contador_diario WHERE data = '$date'"); if (mysqli_num_rows($resultado)== true){ // registro ja existe } else { // resultado nao encontrado entao inserir $sql = "INSERT INTO contador_diario ('data', 'contador') VALUES ('$date', '1')"; if ($arquivo->query($sql) == TRUE) { echo "Data cadastrada com sucesso"; } else { echo "Erro: " . $sql . "<br>" . $arquivo->error; } } // refaz a pesquisa para registrar o contador $resultado = $arquivo->query("SELECT data,contador FROM contador_diario WHERE data = '$date'"); // igualar a array a uma variavel $linha=mysqli_fetch_array($resultado); $cod_2 = $linha["contador"]+1; // lista a variavel //echo "<font face='Arial'><span class='style14'>$cod_2</span></font>"; $sql = "UPDATE contador_diario SET contador=$cod_2"; if ($arquivo->query($sql) === TRUE) { // echo "Alteração efetuada com sucesso"; } else { // echo "Erro alterando o contador de visitas diario" . mysqli_error($arquivo); } // fecha a conexao mysqli_close($arquivo); ?>  
×

Informação importante

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