em

Como converter varchar em date no MySQL

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.

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;

 

Gostou dessa matéria?

Inscreva seu email para receber atualizações com as últimas publicações do nosso blog.

6 opinaram!

Deixe sua opinião!
    • 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+!

  1. 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)

  2. 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!

Deixe o seu comentário: