Qual a diferença entre DATE, DATETIME e TIMESTAMP no SQL?

DATE, DATETIME e TIMESTAMP são tipos de dados usados para armazenar informações de data e hora no SQL. Saiba as diferenças e como escolher o melhor para seu banco de dados.

Qual a diferença entre DATE, DATETIME e TIMESTAMP no SQL?

Em bancos de dados SQL, é comum trabalhar com dados de data e hora, e para isso, o SQL oferece diferentes tipos de dados. DATE, DATETIME e TIMESTAMP são usados para armazenar informações relacionadas ao tempo, mas com diferenças importantes. Neste tutorial, vamos entender cada um deles, suas diferenças e quando é melhor usar cada tipo.

1. O que é DATE?

O tipo DATE é usado para armazenar apenas a data, sem informações de hora. Ele armazena uma data no formato YYYY-MM-DD, o que significa ano, mês e dia.

Exemplo de uso de DATE

CREATE TABLE eventos (
    id INT,
    nome VARCHAR(100),
    data_evento DATE
);

Neste exemplo, a coluna data_evento armazena apenas a data do evento, sem a hora. Ela pode armazenar valores como 2023-10-12.

2. O que é DATETIME?

O tipo DATETIME é usado para armazenar data e hora. Ele armazena tanto a data quanto a hora no formato YYYY-MM-DD HH:MM:SS. Isso significa que, além da data, o DATETIME também registra a hora, minuto e segundo.

Exemplo de uso de DATETIME

CREATE TABLE transacoes (
    id INT,
    valor DECIMAL(10,2),
    data_transacao DATETIME
);

Aqui, a coluna data_transacao armazena a data e a hora em que a transação ocorreu, como 2023-10-12 14:30:00.

3. O que é TIMESTAMP?

O tipo TIMESTAMP também armazena data e hora, mas com algumas diferenças importantes. Ele armazena a data e hora no formato YYYY-MM-DD HH:MM:SS, mas com um fuso horário associado. A principal característica do TIMESTAMP é que ele é dependente do fuso horário e pode ser ajustado automaticamente conforme o fuso horário do sistema.

Exemplo de uso de TIMESTAMP

CREATE TABLE logs (
    id INT,
    mensagem VARCHAR(255),
    data_log TIMESTAMP
);

Neste exemplo, a coluna data_log armazena tanto a data quanto a hora em que o log foi registrado, considerando o fuso horário do banco de dados.

4. Diferenças principais entre DATE, DATETIME e TIMESTAMP

A principal diferença entre esses três tipos de dados é o formato e o contexto de uso:

  • DATE: Armazena apenas a data (sem hora).
  • DATETIME: Armazena data e hora no formato YYYY-MM-DD HH:MM:SS, sem considerar o fuso horário.
  • TIMESTAMP: Armazena data e hora no formato YYYY-MM-DD HH:MM:SS, com a diferença de que ele está associado a um fuso horário e pode ser ajustado automaticamente de acordo com o fuso horário do sistema.

5. Quando usar DATE?

Use o tipo DATE quando você precisar armazenar apenas a data, sem a necessidade de considerar a hora. Isso é útil para eventos ou registros que se baseiam apenas em uma data específica, como nascimento, aniversários ou datas de vencimento.

Exemplo de uso de DATE

CREATE TABLE aniversarios (
    id INT,
    nome VARCHAR(100),
    data_nascimento DATE
);

Neste exemplo, a coluna data_nascimento armazena apenas o aniversário de cada pessoa, sem se preocupar com a hora.

6. Quando usar DATETIME?

Use o tipo DATETIME quando precisar armazenar data e hora, mas não precisar lidar com fusos horários. Isso é útil para registrar eventos ou transações em que o horário local é relevante, mas a conversão entre fusos horários não é necessária.

Exemplo de uso de DATETIME

CREATE TABLE consultas (
    id INT,
    nome_paciente VARCHAR(100),
    data_consulta DATETIME
);

Aqui, a coluna data_consulta armazena tanto a data quanto a hora da consulta médica.

7. Quando usar TIMESTAMP?

Use TIMESTAMP quando precisar armazenar data e hora e também precisar levar em conta o fuso horário. O TIMESTAMP é útil quando você está lidando com sistemas que operam em múltiplos fusos horários, como aplicações globais, e deseja garantir que os horários sejam consistentes em diferentes regiões do mundo.

Exemplo de uso de TIMESTAMP

CREATE TABLE pedidos (
    id INT,
    nome_cliente VARCHAR(100),
    data_pedido TIMESTAMP
);

Aqui, a coluna data_pedido armazena a data e a hora do pedido, com ajuste de fuso horário conforme necessário.

8. Diferenças de armazenamento e desempenho

  • DATE: Como armazena apenas a data, ocupa menos espaço e é mais eficiente em termos de armazenamento, mas não inclui informações de tempo.
  • DATETIME: Armazena tanto a data quanto a hora, ocupando mais espaço em disco e exigindo mais recursos para manipulação.
  • TIMESTAMP: Tem um comportamento dependente de fuso horário e é ajustado automaticamente, o que pode causar um pequeno impacto no desempenho, especialmente em sistemas de grandes dimensões com muitos fusos horários.

9. Conclusão

Ao escolher entre DATE, DATETIME e TIMESTAMP, é importante considerar a necessidade de armazenar apenas a data, ou a data com hora, e se o fuso horário será um fator importante. DATE é ideal para situações em que a hora não é relevante, DATETIME é útil para dados locais com hora, e TIMESTAMP deve ser usado quando o fuso horário for uma consideração crítica.

Em sistemas de banco de dados, a escolha entre DATE, DATETIME e TIMESTAMP pode impactar o desempenho e o armazenamento dos dados. Ao armazenar apenas uma data, o tipo DATE é suficiente e mais eficiente. Quando é necessário armazenar data e hora, DATETIME oferece uma solução prática, enquanto TIMESTAMP é ideal para cenários que envolvem fusos horários. Cada tipo tem sua utilidade, e a escolha correta pode otimizar tanto o desempenho quanto a clareza dos dados no banco de dados.

Algumas aplicações:

  • Armazenamento de datas de vencimento de faturas utilizando DATE
  • Registro de transações bancárias com DATETIME para armazenar a data e hora da transação
  • Gestão de pedidos em um sistema de e-commerce com TIMESTAMP para garantir a consistência de dados em diferentes fusos horários
  • Armazenamento de eventos e conferências globais com TIMESTAMP para sincronizar horários em diferentes regiões

Dicas para quem está começando

  • Use DATE se você só precisa da data sem se preocupar com a hora
  • Escolha DATETIME quando for importante registrar tanto a data quanto a hora em sua aplicação
  • Considere usar TIMESTAMP se seu sistema operar em múltiplos fusos horários
  • Evite usar TIMESTAMP se não for necessário lidar com fusos horários, pois ele pode causar problemas de desempenho
  • Teste o impacto no desempenho ao escolher entre DATE, DATETIME e TIMESTAMP em grandes bancos de dados

Contribuições de Ricardo Vasconcellos

Compartilhe este tutorial: Qual a diferença entre DATE, DATETIME e TIMESTAMP no SQL?

Compartilhe este tutorial

Continue aprendendo:

Como armazenar valores booleanos no SQL se não existe um tipo BOOLEAN nativo?

Embora o SQL não tenha um tipo nativo BOOLEAN, existem formas de armazenar valores booleanos de maneira eficiente usando tipos de dados como INT ou TINYINT.

Tutorial anterior

Como armazenar e manipular fusos horários no SQL?

Saiba como lidar com fusos horários no SQL e como armazenar e manipular dados relacionados a diferentes fusos horários em sua aplicação.

Próximo tutorial