Esta precisando ordenar um evento por data e não esta dando certo? Alguns usuários conservam o costume de criar campos com informação de datas em formato de strings,isso não é uma boa pratica, o problema é que se você tentar ordenar datas em uma tabela do tipo varchar no mysql, o resultado não vai sair na ordem correta, pois os campos varchar são ordenados da esquerda pra direita em ordem alfanumérica.
A solução nesse caso é usar a função str_to_date() do MySQL.
Separamos alguns artigos que você também pode gostar de ler:
Sintaxe básica:
str_to_date(CAMPO, ‘formato armazenado da string’)
Exemplo pratico:
SELECT str_to_date(data, '%d/%m/%Y') AS data FROM datas_em_strings ORDER BY data; |
SELECT str_to_date(data, '%d/%m/%Y') AS data FROM datas_em_strings ORDER BY data;
Como fazer o between no campo data sendo ele no banco de dados como varchar?
Agradeço pelos tópicos que vc posta
Olá Eduardo, neste caso você terá que converter o campo varchar para date, pois o between não se aplica a strings.
Uma das partes mais importantes de um projeto é a modelagem do bando de dados, as vezes você pode achar que é mais fácil usar uma scring ao invés de um date ou datetime, mais a dor de cabeça pode vir depois quando for necessário fazer alguma modificação em seu sistema.
T+!
Ivanilton concordo com vc sobre modelagem de banco de dados. Mas existem sistemas que já estão com data em strings há tempos e tudo no sistema trabalha já desta forma e não há como alterar isto se não remodelar todo o sistema. Além é claro do cliente querer te pagar apenas algumas horas para fazer mais uma ferramentinha no que já está funcionando. A idéia do cliente é sempre assim (se funciona com tudo pq não funciona com o que quero q vc faça). Infelizmente nem sempre há um analista no projeto ou orçamento suficiente para uma remodelagem.
A query que consegui fazer o between no campo data como string é:
SELECT * FROM `nomeTabela`
WHERE (STR_TO_DATE(`data`,’%d-%m-%Y’)) BETWEEN ‘2012-01-14’ AND ‘2012-10-25’
Procurei bastante na internet mas não encontrei um exemplo simples como este com relação ao Between.
Obrigado pela rápida resposta.
Abraços!
Gostei muito dos seus posts (Trabalhando corretamente com Data , e também os erros mais comuns de programadores PHP com MySQL)
Boa dica Eduardo! Nada é impossível para quem tem criatividade 🙂
Abraços!
Estou lendo direto e seus post e esta de parabéns estou enfrentando o problema com BETWEEN entre datas gravadas em um campo varchar. tem hora que traz informação tem hora que não. O melhor a se fazer e mudar para date. so que tenho um problema tem um processo no meu sistema que os dados são importados de um txt e o formato que vem deste arquivo dd/mm/YYY como faço para converter para o padrao do mysql no insert vindo de um arquivo txt. obrigado
Olá Luciano, Tudo bem?
Bom, deixa ver se eu entendi, vc tem uma variável com a data no formato brasileiro (dd/mm/yyyy) e quer salva-la no banco de dados no formato do MySQL (yyyy-dd-mm), né?
Tende fazer desse jeito: $data = implode(‘-‘,array_reverse(explode(‘/’,$data)));
Abs!