Formatos de data e hora no MySQL

O MySQL tem tipos de campos específicos para representar data e hora: DATE e TIME, respectivamente.
Para representar valores combinados dos dois tipos, é possível usar o DATETIME.
Estes valores podem ser armazenados e apresentados nos seguintes formatos:

  • Os valores DATE são manipulados como strings no formato CCYY-MM-DD — onde CC, YY, MM e DD representam o século (century), o ano (year), o mês e o dia do mês.
  • Os valores TIME são representados por strings, no formato hh:mm:ss — hora (hh), minutos (mm) e segundos (ss).
    Os valores TIME podem ser entendidos como referentes à hora do dia. Na verdade, o MySQL os trata como tempo decorrido — de forma que um campo com este tipo de dado pode conter valores superiores a 23:59:59 ou, até mesmo, negativos.
    Caso você se interesse em saber, estes valores podem variar entre -838:59:59 e 838:59:59.
  • Valores DATETIME são strings combinadas de data e hora: CCYY-MM-DD hh:mm:ss.
  • O TIMESTAMP inclui data e hora, mas é representado em uma string CCYYMMDDhhmmss.
    Este tipo de campo possui algumas propriedades especiais e tem valores um pouco mais difíceis de se ler, à primeira vista. Como regra geral, contudo, você pode tratar os campos TIMESTAMP da mesma forma como trata os DATETIME.

No exemplo, abaixo, veja a representação dos campos ‘hora_saida’ e ‘hora_chegada’, da tabela ‘viagem’:

SELECT hora_saida, hora_chegada
    -> FROM viagem;
+------------------+--------------------+
| hora_saida       | hora_chegada       |
+------------------+--------------------+
|         15:00:00 |           15:00:00 |
|         05:01:30 |           02:30:20 |
|         12:30:20 |           17:30:45 |
+------------------+--------------------+

As datas, podem ser representadas, dentro da tabela, da seguinte forma:

SELECT data_saida
    -> FROM viagem;

Não se esqueça que as datas estão no formato ANO-MÊS-DIA:

+------------+
| data_saida |
+------------+
| 2015-02-28 |
| 2015-01-15 |
| 2015-03-05 |
| 2014-12-31 |
| 2015-06-04 |
+------------+

Os campos gravados com valores do tipo DATETIME, na minha tabela registros estão representados da seguinte forma:

SELECT data_nascimento
    -> FROM registros;
+---------------------+
|     data_nascimento |
+---------------------+
| 1970-01-01 00:00:00 |
| 1987-03-05 12:30:15 |
| 1999-12-31 09:00:00 |
| 2000-06-04 15:45:30 |
+---------------------+

Estes mesmos valores, se usado o formato do tipo TIMESTAMP, serão representados da seguinte forma:

SELECT data_nascimento
    -> FROM registros;
+------------------+
|  data_nascimento |
+------------------+
|   19700101000000 |
|   19870305123015 |
|   19991231090000 |
|   20000604154530 |
+------------------+

Como você pode ver, a leitura da informação TIMESTAMP é um pouco difícil, mas é um formato perfeito para nomear arquivos ou ser livremente formatado pelo desenvolvedor, através de funções de tratamento de strings.

Como lidar com os formatos de dados de data e hora no MySQL

O formato CCYY-MM-DD, usado pelo MySQL para armazenar dados referentes a data (DATE) segue o padrão ISO 8601. Este formato tem a vantagem de — uma vez que o ano, o mês e o dia serem representados com tamanhos fixos e da esquerda para direita – compor uma string que naturalmente é organizável em ordem temporal. Você pode usar este formato para compor nomes de arquivos que, ao ser listados em ordem alfabética, já ficarão naturalmente organizados também na ordem temporal.

Não é possível alterar a forma com o MySQL grava dados em campos DATE. Se você usa outro formato no seu programa, poderá usar uma função como a DATE_FORMAT() para adequar a string de data ao respectivo campo

Não é possível armazenar datas no formato DD/MM/YY (Dia/Mês/Ano). A função DATE_FORMAT também pode ser usada para formatar a exibição da data.
Alguns programadores optam por armazenar seus dados de datas como strings, em campos do tipo CHAR, comuns e lidam com as datas dentro de seus scripts — mas aí perde-se a possibilidade de fazer operações, dentro do banco de dados, com as datas (que pode trazer ganhos de performance para o sistema).
Quando a string de data já se encontra em formato semelhante ao requerido pela ISO, ele pode sequer precisar de qualquer tratamento para ser armazenado. A string 94-04-14, já será interpretada como 1994-04-14 pelo MySQL — e será armazenada como tal.
O mesmo vai acontecer se você repassar os valores 940414 ou 19940414.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *