- 0.1 1. Get the Current Time in MySQL (Bottom Line: Shortest SQL Cheat Sheet)
- 0.1.1 1.1 MySQL current date and time: NOW() / CURRENT_TIMESTAMP
- 0.1.2 1.2 MySQL current date: CURDATE()
- 0.1.3 1.3 MySQL current time: CURTIME()
- 0.1.4 1.4 MySQL current UTC time: UTC_TIMESTAMP()
- 0.1.5 1.5 MySQL current time with milliseconds: NOW(3) / CURRENT_TIMESTAMP(3)
- 0.1.6 1.6 Quick cheat sheet by purpose
- 0.1.7 Common pitfalls summary
- 0.2 2. Differences Between MySQL NOW() and CURRENT_TIMESTAMP
- 0.2.1 2.1 Which should you use? (SELECT usage / DEFAULT usage)
- 0.2.2 2.2 Uso correto de DEFAULT / ON UPDATE
- 0.2.3 2.3 Diferenças entre NOW() e SYSDATE() (Importante)
- 0.2.4 2.4 Qual deles você deve usar?
- 0.2.5 2.5 Equívocos e problemas comuns
- 0.2.6 2.6 Boas práticas recomendadas
- 0.2.7 3.1 Formatação de datetime no MySQL: DATE_FORMAT(NOW(), …)
- 0.2.8 3.2 Conversão para formato estilo japonês ou 12 h
- 0.2.9 3.3 Formatação apenas de hora no MySQL: TIME_FORMAT()
- 0.2.10 3.4 Conversão de string → datetime: STR_TO_DATE()
- 0.2.11 3.5 Pontos importantes em produção
- 0.2.12 3.6 Formatação com milissegundos
- 0.2.13 3.7 Resumo por finalidade de formatação
- 0.1 1. Get the Current Time in MySQL (Bottom Line: Shortest SQL Cheat Sheet)
- 1 4. MySQL Adição/Subtração de Data e Hora (DATE_ADD / DATE_SUB)
- 1.1 4.1 Adição de datetime no MySQL: DATE_ADD()
- 1.2 4.2 Subtração de datetime no MySQL: DATE_SUB()
- 1.3 4.3 Padrões comuns em produção
- 1.4 5. Calculando Diferenças de Data/Hora no MySQL (DATEDIFF / TIMESTAMPDIFF)
- 1.5 6. Consultas de Intervalo de Datas Usando a Hora Atual
1. Get the Current Time in MySQL (Bottom Line: Shortest SQL Cheat Sheet)
If you want to get the current time in MySQL, there are only a few SQL functions you need to remember.
Below is the shortest answer for the search keyword “MySQL get current time”.
1.1 MySQL current date and time: NOW() / CURRENT_TIMESTAMP
Returns the current date + time (YYYY-MM-DD HH:MM:SS).
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
Example output
2025-02-01 15:30:45
NOW()andCURRENT_TIMESTAMPusually return the same result.- Both return the current date and time.
- If you need milliseconds, use the following.
SELECT NOW(3);
Notes (common mistakes)
- Depends on the server time zone setting.
- In a UTC environment, you may get UTC instead of Japan time.
- During query execution, it basically returns the same time (fixed within a single statement).
1.2 MySQL current date: CURDATE()
Returns only the date (no time).
SELECT CURDATE();
Example output
2025-02-01
Use cases
- Query today’s data
- Date comparisons (e.g., filter only today’s records)
Notes
- The return value is a
DATEtype. - Not suitable when you need time-of-day processing.
1.3 MySQL current time: CURTIME()
Returns only the time.
SELECT CURTIME();
Example output
15:30:45
Use cases
- Business hours checks
- Branching logic by time window
Notes
- Does not include date information.
- Cannot be used to compare with
DATE-type columns.
1.4 MySQL current UTC time: UTC_TIMESTAMP()
Returns the time in UTC (Coordinated Universal Time), regardless of the server time zone setting.
SELECT UTC_TIMESTAMP();
Example output
2025-02-01 06:30:45
When you should use it
- Global services
- Designs that store logs in UTC consistently
Common mistakes
- Mixing it with
NOW()causes time offsets - If the app assumes JST, you’ll see a 9-hour difference
1.5 MySQL current time with milliseconds: NOW(3) / CURRENT_TIMESTAMP(3)
MySQL 5.6 and later supports fractional seconds.
SELECT NOW(3);
SELECT CURRENT_TIMESTAMP(3);
Example output
2025-02-01 15:30:45.123
Notes for storing
Your column must also support fractional seconds.
DATETIME(3)
TIMESTAMP(3)
If you store it into a non-supported column, the fractional part will be truncated.
1.6 Quick cheat sheet by purpose
| Purpose | SQL |
|---|---|
| Current date and time | SELECT NOW(); |
| Get UTC | SELECT UTC_TIMESTAMP(); |
| Date only | SELECT CURDATE(); |
| Time only | SELECT CURTIME(); |
| Get milliseconds | SELECT NOW(3); |
Common pitfalls summary
- Time is offset because you didn’t verify the time zone
- Using
NOW(3)without a milliseconds-capable column - Mixing UTC and local time
- Not understanding the difference between DATETIME and TIMESTAMP

Difference between MySQL DATETIME and TIMESTAMP (comparing whether time zone conversion occurs)
2. Differences Between MySQL NOW() and CURRENT_TIMESTAMP
NOW() and CURRENT_TIMESTAMP look similar, but misunderstanding where to use them and how they behave can easily cause bugs. Here we整理 the differences, correct usage, and common pitfalls.
2.1 Which should you use? (SELECT usage / DEFAULT usage)
■ When retrieving the current date/time in SELECT
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
Normally, both return the same result.
- They are equivalent (synonyms)
- The return value is equivalent to
DATETIME - Affected by the time zone setting
Practical takeaway
- Prefer readability →
NOW() - Prefer standard SQL style →
CURRENT_TIMESTAMP
■ When setting a column default value
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
The key point here is:
For a default value, it’s common to use
CURRENT_TIMESTAMP.
Alguns ambientes permitem NOW() também, mas o comportamento pode diferir dependendo da versão do MySQL e do modo SQL. A escolha mais segura é CURRENT_TIMESTAMP.
2.2 Uso correto de DEFAULT / ON UPDATE
Se você quiser atualizar automaticamente um timestamp “updated at”:
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
Comportamento
- Em INSERT → define a hora atual para created_at / updated_at
- Em UPDATE → atualiza apenas updated_at
Erros comuns
- Não corresponder à precisão de frações de segundo ao usar
DATETIME - Encontrar limitações de versões antigas do MySQL com múltiplas colunas TIMESTAMP (MySQL 5.6 e anteriores tinham restrições)
2.3 Diferenças entre NOW() e SYSDATE() (Importante)
O ponto fácil de perder é a diferença em relação ao SYSDATE().
SELECT NOW(), SYSDATE();
■ Diferenças de comportamento
NOW()→ fixado no início da consultaSYSDATE()→ retorna a hora no momento em que é chamado
Exemplo:
SELECT NOW(), SLEEP(3), NOW();
NOW() retorna o mesmo valor.
SELECT SYSDATE(), SLEEP(3), SYSDATE();
SYSDATE() mostra uma diferença de 3 segundos.
2.4 Qual deles você deve usar?
| Function | Behavior | Recommended use |
|---|---|---|
| NOW() | Fixed within a query | Logging, consistency-focused |
| SYSDATE() | Call-time value | Precise real-time retrieval |
Por que NOW() é frequentemente recomendado em sistemas reais
- Mantém a consistência dentro de uma transação (um mecanismo que processa múltiplas instruções SQL juntas)
- Mais seguro em ambientes de replicação
2.5 Equívocos e problemas comuns
❌ “NOW() e CURRENT_TIMESTAMP são exatamente os mesmos, então você não precisa se preocupar com isso.”
→ Diferenças podem aparecer em valores padrão ou no comportamento de atualização, dependendo do ambiente.
❌ “SYSDATE() é mais preciso, então é sempre melhor.”
→ Pode causar problemas em ambientes de replicação.
❌ Não verificar o fuso horário
SHOW VARIABLES LIKE '%time_zone%';
Se você usá-lo sem verificar, pode obter desvios de horário.
2.6 Boas práticas recomendadas
- Recuperação com SELECT →
NOW() - Valor padrão da coluna →
CURRENT_TIMESTAMP - Autoatualização →
ON UPDATE CURRENT_TIMESTAMP - Foco em consistência → padrão
NOW() - Design baseado em UTC →
TIMESTAMP+ armazenar em UTC
- MySQL Formatação da Hora Atual (DATE_FORMAT / TIME_FORMAT)
Depois de obter a hora atual no MySQL, é muito comum alterar o formato de exibição.
Para a intenção de busca “MySQL current time format”, a função mais importante a entender éDATE_FORMAT().
3.1 Formatação de datetime no MySQL: DATE_FORMAT(NOW(), …)
Sintaxe básica:
sql
SELECT DATE_FORMAT(target_datetime, 'format_string');
Exemplo: formatar a hora atual
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
Exemplo de saída
2025-02-01 15:30:45
Especificadores de formato mais usados
| Especificador | Significado | Exemplo |
|---|---|---|
| %Y | Ano (4 dígitos) | 2025 |
| %m | Mês (2 dígitos) | 02 |
| %d | Dia (2 dígitos) | 01 |
| %H | Hora (formato 24h) | 15 |
| %h | Hora (formato 12h) | 03 |
| %i | Minuto | 30 |
| %s | Segundo | 45 |
| %p | AM/PM | PM |
3.2 Conversão para formato estilo japonês ou 12 h
■ Formato estilo japonês
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
Exemplo de saída:
2025-02-01 15:30
■ Formato 12 h + AM/PM
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');
Exemplo de saída:
2025-02-01 03:30:45 PM
3.3 Formatação apenas de hora no MySQL: TIME_FORMAT()
Função de formatação específica para dados do tipo TIME.
sql
SELECT TIME_FORMAT(CURTIME(), '%H:%i');
Exemplo de saída:
15:30
Observações
– TIME_FORMAT() serve apenas para tipo TIME
– Para DATETIME, use DATE_FORMAT()
3.4 Conversão de string → datetime: STR_TO_DATE()
Para converter dados de string em um tipo datetime:
sql
SELECT STR_TO_DATE('2025-02-01 15:30:45', '%Y-%m-%d %H:%i:%s');
Exemplo de saída:
2025-02-01 15:30:45
Erros comuns
– Incompatibilidade de formato devolve NULL
– Confundir %m e %c (mês com zero à esquerda vs sem zero)
3.5 Pontos importantes em produção
❌ Não compare após formatar
Exemplo ruim:
sql
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = '2025-02-01';
Isso não é recomendado porque os índices se tornam ineficazes (desempenho da consulta degrada).
Recomendado:
sql
WHERE created_at >= '2025-02-01' AND created_at < '2025-02-02';
❌ Não sobre‑formate no lado do banco de dados
Em aplicações web, a formatação para exibição costuma ser mais flexível no lado da aplicação.
O banco de dados deve focar em “armazenamento e cálculo”.
3.6 Formatação com milissegundos
sql
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f');
%f representa microssegundos (6 dígitos).
Nota
Se a coluna não for DATETIME(3) ou similar, a parte fracionária será truncada.
Disponível no MySQL 5.6 e posteriores.
3.7 Resumo por finalidade de formatação
| Finalidade | Função |
|---|---|
| Alterar formato de exibição | DATE_FORMAT |
| Formatar apenas hora | TIME_FORMAT |
| String → datetime conversion | STR_TO_DATE |
| Exibir milissegundos | %f |
4. MySQL Adição/Subtração de Data e Hora (DATE_ADD / DATE_SUB)
Mesmo que você consiga obter a hora atual, não pode usá‑la efetivamente em produção sem cálculos de data/hora como “X dias depois” ou “X horas atrás.”
Aqui explicamos como usar DATE_ADD() e DATE_SUB() com a hora atual no MySQL.
4.1 Adição de datetime no MySQL: DATE_ADD()
Sintaxe básica:
sql
SELECT DATE_ADD(base_datetime, INTERVAL value unit);
Exemplo: 7 dias a partir de agora
sql
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
Exemplo: 2 horas depois
sql
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR);
Unidades mais usadas
| Unidade | Significado |
|---|---|
| SECOND | Segundos |
| MINUTE | Minutos |
| HOUR | Horas |
| DAY | Dias |
| MONTH | Meses |
| YEAR | Anos |
4.2 Subtração de datetime no MySQL: DATE_SUB()
Sintaxe básica:
sql
SELECT DATE_SUB(base_datetime, INTERVAL value unit);
Exemplo: 30 dias atrás
sql
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
Exemplo: 1 hora atrás
sql
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);
Casos de uso
– Verificações de expiração
– Exclusão de logs antigos
– Extração de dados recentes
4.3 Padrões comuns em produção
■ Recuperar dados das últimas 24 horas
sql
SELECT * FROM logs WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
■ Definir um prazo 7 dias depois
sql
INSERT INTO tasks (deadline) VALUES (DATE_ADD(NOW(), INTERVAL 7 DAY));
4.4 Erros comuns e precauções
❌ Aplicar funções às colunas
Exemplo ruim:
WHERE DATE(created_at) = CURDATE();
Isso desabilita índices (otimização de desempenho da consulta).
Recomendado:
WHERE created_at >= CURDATE() AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
❌ Ignorar fusos horários
NOW() é baseado no fuso horário do servidor
Se você armazenar em UTC, use UTC_TIMESTAMP() como base
Exemplo:
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL 1 DAY);
❌ Armadilhas ao adicionar meses
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);
→ Devido ao ajuste de fim de mês, a data pode mudar.
(O resultado pode ser 2025-02-28 dependendo do ambiente.)
Entenda a especificação antes de usar cálculos baseados em meses.
4.5 Adição com milissegundos
SELECT DATE_ADD(NOW(3), INTERVAL 500 MILLISECOND);
※ O MySQL não suporta MILLISECOND diretamente.
Especifique em microssegundos:
SELECT DATE_ADD(NOW(3), INTERVAL 500000 MICROSECOND);
4.6 Melhores práticas
Padronize NOW() ou UTC_TIMESTAMP() como sua base
Não aplique funções às colunas na cláusula WHERE
Entenda o comportamento da adição baseada em meses
Se precisar de precisão, use DATETIME(3) ou superior
5. Calculando Diferenças de Data/Hora no MySQL (DATEDIFF / TIMESTAMPDIFF)
Em sistemas de produção, simplesmente obter a hora atual não é suficiente. Frequentemente é necessário calcular quantos dias se passaram ou quantas horas restam.
5.1 Calculando diferenças de data: DATEDIFF()
DATEDIFF() calcula a diferença em dias entre duas datas.
SELECT DATEDIFF('2025-02-10', '2025-02-01');
Resultado
9
Pontos chave
- Retorna diferença apenas em dias
- A parte de tempo é ignorada
- O resultado pode ser negativo
Exemplo: calcular dias desde a criação
SELECT DATEDIFF(NOW(), created_at)
FROM users;
5.2 Calculando diferenças por unidade: TIMESTAMPDIFF()
TIMESTAMPDIFF() permite especificar a unidade.
SELECT TIMESTAMPDIFF(unit, start_datetime, end_datetime);
Exemplo: diferença em horas
SELECT TIMESTAMPDIFF(HOUR, '2025-02-01 10:00:00', '2025-02-01 15:00:00');
Resultado
5
Unidades comuns
| Unit | Meaning |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| MONTH | Months |
| YEAR | Years |
Exemplo: calcular minutos desde o login
SELECT TIMESTAMPDIFF(MINUTE, login_at, NOW())
FROM users;
5.3 Casos de uso em produção
- Verificações de timeout de sessão
- Verificações de expiração de assinatura
- Cálculo de tempo decorrido em logs
- Lógica de limitação de taxa
5.4 Erros comuns
❌ Usar DATEDIFF quando a precisão de tempo é necessária
DATEDIFF() ignora horas e minutos.
❌ Inverter a ordem dos argumentos
A ordem é:
TIMESTAMPDIFF(unit, start, end)
Se invertido, o resultado se torna negativo.
❌ Ignorar fusos horários
Se misturar UTC e hora local, as diferenças podem estar incorretas.
5.5 Melhores práticas
- Use
TIMESTAMPDIFF()quando a precisão de tempo importa - Use
DATEDIFF()para cálculos simples de dias - Garanta uso consistente de fusos horários
- Padronize UTC em sistemas distribuídos
6. Consultas de Intervalo de Datas Usando a Hora Atual
Um dos requisitos reais mais comuns é recuperar registros dentro de um intervalo de tempo específico, como:
- Registros de hoje
- Últimos 7 dias
- Últimas 24 horas
- Este mês
6.1 Recuperando registros de hoje (amigável ao índice)
SELECT *
FROM logs
WHERE created_at >= CURDATE()
AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
Por que isso está correto
- Nenhuma função é aplicada à coluna
- Os índices permanecem utilizáveis
- Consulta de intervalo eficiente
6.2 Últimos 7 dias
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);
6.3 Últimas 24 horas
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
6.4 Este mês
SELECT *
FROM logs
WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND created_at < DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH);
Em sistemas de produção, costuma ser melhor calcular os limites no lado da aplicação e passá‑los como parâmetros.
6.5 Erros comuns de desempenho
❌ Aplicar funções a colunas indexadas
WHERE DATE(created_at) = CURDATE();
Isso impede o uso de índices e causa varreduras completas da tabela.
❌ Usar BETWEEN descuidadamente
BETWEEN é inclusivo e pode causar problemas de diferença de um segundo.
6.6 Resumo das melhores práticas
- Sempre use condições de intervalo para filtragem de datas
- Evite aplicar funções a colunas indexadas
- Prefira armazenamento em UTC em sistemas globais
- Seja explícito sobre as suposições de fuso horário


