GARANTIR DESCONTO

Fórum Select entre datas SQL #581005

05/05/2017

0

Olá,

Estou com uma dificuldade. Mas é uma dúvida do que uma dificuldade.

Estou fazendo um SELECT (com PHP) entre duas datas.

Ex.:
SELECT idFrequencia FROM frequencias WHERE dataChamada >= '06/02/2017' AND dataChamada <= '20/04/2017'. 


No meu BD, a coluna da tabela está em formato TEXT. Então, quando o SQL é executado, alguns resultados acabam sendo exibidos, mas porque ele não está 'entendendo' a consulta.

A dúvida é seguinte:

Se eu utilizar TEXT na coluna do BD, pode dar problema no formato de data quando o SQL for executado?
Como resolvo esse problema convertendo as datas?
João Ferlini

João Ferlini

Responder

Post mais votado

05/05/2017

SELECT 
    idFrequencia 
FROM
    frequencias 
WHERE 
    DATE_FORMAT(STR_TO_DATE(dataChamada , '%d/%m/%Y'), '%Y-%m-%d') 
>= '2017-02-06'  
AND   DATE_FORMAT(STR_TO_DATE(dataChamada , '%d/%m/%Y'), '%Y-%m-%d') 
<= '2017-04-20'

 DATE_FORMAT(STR_TO_DATE(data, '%d/%m/%Y'), '%Y-%m-%d') 


Só ressaltando que quando o campo data é texto o correto é você fazer a conversão para o padrão américa para fazer a comparação.dd/MM/yyyy.

Note que 01/12/2017 quando comparado se é maior que 10/02/2017, está errado, pois no caso está comparando texto, e o mysql vai tentar converter pra inteiro, logo 01122017 não é maior que 10022017, agora se você inverter para o padrão americano vai que 20171201 é maior que 20170210. Fica a dica.

Fabio Parreira

Fabio Parreira
Responder

Gostei + 1

Mais Posts

05/05/2017

Luiz Santos

João.

Qual banco você está usando?

Grande abs
Responder

Gostei + 0

05/05/2017

Jones Granatyr

Opa! Nesse caso você terá mesmo que converter de string para data. Dê uma olhada na função "strtotime", que consegue fazer essa conversão
Responder

Gostei + 0

05/05/2017

João Ferlini

Uso o MySql.
Responder

Gostei + 0

05/05/2017

João Ferlini

Acabei utilizando essa função para fazer esse SELECT, mas mesmo assim ele trata datas como por exemplo: 13/02/2017 como incorretas, porque ele tenta converter a data para 2017-02-13 ou 2017-13-02, onde 13 é o mês (o que não existe).
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar