Categorias
Banco de dados Tutoriais

Formatos de data e hora no MySQL

Conheça as características básicas dos tipos de dados usados pelo MySQL para armazenar datas e horas: date, time, datetime, timestamp.

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.

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!

2 respostas em “Formatos de data e hora no MySQL”

Bom dia amigo,
Na busca de um erro no meu projeto sobre data, cheguei aqui neste seu artigo.
Tenho dois campos sobre data, que é dataentrada(tipo date) e datasaida(tipo date).
No insert preencho somente data de entrada para depois fazer a atualização quando for o momento de preencher a data de saída.
Acontece que ao executar o submit salvar registo, somente salva o registro no banco de dados se for preenchido a “data de saída”, caso contrário não salva o registro.
Este campo preciso somente a data e não com time.
Não consigo entender este erro, agradeço muito pela ajuda.

Olá amigo, vi um post seu sobre calculo de horas no mysql preciso muito da sua ajuda, aqui na empresa tenho um banco mysql que controla a saída de alguns carros, geralmente esses carros saiam no dia e voltava no mesmo dia, porém agora esses carros acabam voltando no dia seguinte es o meu problema. O banco estava modelado com as seguintes colunas:

DATA_SAIDA –> Date
HORA_INICIA –>Time

HORA_FINAL–>Time

O problema acontece quando o carro por exemplo sai as 21:00 e só retorna as 05:00 da manhã nesse calculo o mysql está entendendo que é as 17:00 da tarde e faz um calculo maior do que deveria, eu sei que está certo pois não tenho uma data_final porém preciso corrigir isso no relatório existe como eu verificar se a data está a noite e fazer o calculo correto?

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.