1. Visão geral da função MySQL NOW()
A função MySQL NOW() é usada para recuperar facilmente a data e hora atuais dentro do banco de dados. Ao aproveitar o NOW(), você pode obter informações de timestamp úteis para inserção de dados ou registro de logs. Apesar de sua simplicidade, é uma ferramenta poderosa amplamente utilizada na prática.
Sintaxe básica do NOW()
A sintaxe da função NOW() é muito direta. A consulta a seguir recupera a data e hora atuais:
SELECT NOW();
O resultado é retornado no formato YYYY-MM-DD HH:MM:SS. Por exemplo, se a data e hora forem 24 de outubro de 2024, às 16:30, o resultado será:
2024-10-24 16:30:00
Além disso, a função NOW() devolve a data e hora atuais com base no fuso horário do banco de dados. Isso garante um gerenciamento de tempo consistente em todo o sistema.
Casos de uso do NOW()
A função NOW() é particularmente útil nos seguintes cenários:
- Logging : Registra automaticamente o horário de modificações ou inserções de dados.
- Timestamps : Acompanha o momento das ações dos usuários.
- Filtragem baseada em tempo : Extrai dados que ocorreram dentro de um período específico.

2. Exemplos básicos de uso do NOW()
Vamos ver um exemplo simples de como obter a data e hora atuais com a função NOW():
SELECT NOW();
Essa consulta devolve a data e hora atuais. Além do formato de texto, você também pode obter o resultado em formato numérico. Usando a consulta a seguir, a data e hora são retornadas em formato numérico (YYYYMMDDHHMMSS):
SELECT NOW() + 0;
Por exemplo, o resultado pode ser 20241024163000, o que é útil ao lidar com dados em formato numérico.
Especificando a precisão de frações de segundo
A função NOW() permite especificar a precisão de frações de segundo. Você pode definir a precisão como argumento:
SELECT NOW(3);
Essa consulta devolve um resultado com três dígitos de precisão de frações de segundo, como 2024-10-24 16:30:00.123. Esse recurso é especialmente útil em sistemas que exigem precisão subsegundária.
3. Diferença entre SYSDATE() e NOW()
Outra função semelhante ao NOW() é a SYSDATE(), mas elas se comportam de forma ligeiramente diferente:
- NOW() : Recupera o horário no momento da execução da consulta e mantém o mesmo horário ao longo da instrução. Mesmo que a transação dure muito tempo, retorna o mesmo resultado.
- SYSDATE() : Recupera o horário atual a cada passo da consulta. Isso significa que, durante transações de longa duração, fornece timestamps em tempo real.
Por exemplo, em processos batch de longa execução, SYSDATE() fornece resultados mais precisos, enquanto NOW() é preferido quando a consistência da transação é necessária.
Exemplo de diferenças dentro de uma consulta
A seguir, um exemplo de consulta que demonstra a diferença entre SYSDATE() e NOW():
SELECT NOW(), SYSDATE();
Os resultados podem ser semelhantes a:
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
SYSDATE() reflete a diferença em tempo real na execução, enquanto NOW() preserva o timestamp do início da consulta. Escolher a função correta depende do seu caso de uso.

4. Casos de uso práticos do NOW()
A função NOW() é extremamente útil em cenários específicos. Por exemplo, para registrar automaticamente o horário de inserção de dados:
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Isso grava automaticamente a hora atual na coluna created_at quando o registro é inserido. É especialmente valioso para logging ou rastreamento de eventos.
Para extrair dados criados nos últimos 7 dias, você pode usar o NOW() da seguinte forma:
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Essa consulta recupera todos os registros criados nos últimos 7 dias em relação ao horário atual. O NOW() é altamente eficaz para extração de dados dependentes de tempo.
5. Considerações ao usar o NOW()
Existem algumas considerações importantes ao usar NOW(). Em particular, pode afetar a consistência das transações, portanto você deve estar atento ao contexto em que é usado.
- Comportamento Dentro de Transações : A função NOW() retorna resultados consistentes dentro de uma transação, garantindo o mesmo horário mesmo em processos de longa duração. Isso é crucial para manter a integridade dos dados. No entanto, se você precisar de timestamps em tempo real, SYSDATE() é mais apropriado.
Observe também que a função NOW() depende do fuso horário do sistema, o que significa que os resultados podem variar conforme as configurações. Para aplicações globais, esse fator deve ser cuidadosamente considerado durante o design.


