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.
3 replies on “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.
já verificou se o campo datasaida é not null?
se for, vc é obrigado a preencher, não podendo deixar vazio.
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?