1. Visão Geral da Função NOW() do MySQL
A função NOW() do MySQL é usada para recuperar facilmente a data e hora atuais dentro de um banco de dados. Ao utilizar a função NOW(), você pode obter carimbos de data/hora ao inserir dados ou recuperar informações de tempo úteis para fins de registro. Embora simples, é uma ferramenta muito poderosa que é amplamente utilizada.
Sintaxe Básica da Função NOW()
A sintaxe da função NOW() é muito simples. Você pode recuperar a data e hora atuais com a consulta a seguir.
SELECT NOW();
O resultado da execução é 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 seria o seguinte.
2024-10-24 16:30:00
A função NOW() retorna a data e hora atuais com base no fuso horário do banco de dados. Isso permite uma gestão consistente de tempo em todo o sistema.
Casos de Uso Comuns para a Função NOW()
A função NOW() é especialmente útil nas seguintes situações.
- Registro : Registra automaticamente o tempo quando os dados são modificados ou inseridos.
- Carimbos de Data/Hora : Usado para registrar o momento das ações do usuário.
- Filtragem Dependente de Tempo : Extrair dados que ocorreram dentro de um período específico.
2. Exemplos de Uso Básico da Função NOW()
Vamos examinar exemplos básicos de recuperação da data e hora atuais usando a função NOW().
SELECT NOW();
Esta consulta retorna a data e hora atuais. Além de recuperá-la como uma string, você também pode obtê-la em formato numérico. Usando a consulta a seguir, a data e hora atuais são retornadas em formato numérico (YYYYMMDDHHMMSS).
SELECT NOW() + 0;
Por exemplo, o resultado pode ser retornado como “20241024163000”, o que é conveniente ao lidar com o valor numericamente.
Especificando Precisão de Segundos Fracionários
A função NOW() permite que você especifique a precisão de segundos fracionários. Você pode definir a precisão usando um argumento como mostrado abaixo.
SELECT NOW(3);
Esta consulta retorna um resultado com precisão de milissegundos (três dígitos após o ponto decimal). Por exemplo, pode retornar um valor como “2024-10-24 16:30:00.123”. Este recurso é extremamente útil em sistemas que exigem precisão em nível de segundo.
3. Diferença Entre SYSDATE() e NOW()
Existe uma função semelhante à NOW() chamada SYSDATE(), mas elas se comportam ligeiramente de forma diferente.
- NOW() : Recupera o tempo no início da execução da consulta e mantém o mesmo valor durante toda a declaração. Mesmo se uma transação executar por um longo tempo, retorna o mesmo resultado.
- SYSDATE() : Recupera o tempo atual em cada etapa da consulta. Em outras palavras, mesmo durante transações de longa duração, retorna o tempo atual em tempo real.
Por exemplo, em processos em lote de longa duração, SYSDATE() pode fornecer resultados em tempo real mais precisos. No entanto, quando a consistência da transação é importante, NOW() é geralmente recomendado.
Exemplo Mostrando a Diferença Dentro de uma Consulta
A consulta a seguir demonstra a diferença no comportamento entre SYSDATE() e NOW().
SELECT NOW(), SYSDATE();
O resultado pode ser algo assim.
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
A diferença de tempo no momento da execução da consulta é refletida em SYSDATE(), enquanto NOW() retém o tempo quando a execução da consulta começou. Embora a diferença seja sutil, é importante escolher a função apropriada dependendo do caso de uso.

4. Aplicações Práticas da Função NOW()
A função NOW() é muito útil em cenários específicos. Por exemplo, se você quiser registrar automaticamente a data e hora quando os dados são inseridos, você pode usar a função NOW() como mostrado abaixo.
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Isso registra automaticamente o horário atual na coluna created_at quando o registro é inserido. Esse recurso é especialmente valioso para registro de logs e rastreamento de eventos.
Além disso, se você quiser recuperar dados criados nos últimos sete dias, você pode usar a função NOW() da seguinte forma.
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Essa consulta recupera todos os registros criados nos últimos sete dias a partir da data e hora atuais. A função NOW() é extremamente eficaz para extração de dados dependentes de tempo.
5. Considerações Importantes Ao Usar a Função NOW()
Existem vários pontos importantes a considerar ao usar a função NOW(). Em particular, ela pode afetar a consistência de transações, por isso é importante usá-la de forma apropriada dependendo do contexto.
- Comportamento Dentro de Transações : A função NOW() retorna um resultado consistente dentro de uma transação, o que significa que ela retorna o mesmo carimbo de data/hora mesmo durante processos de longa duração. Isso é importante para manter a consistência dos dados. No entanto, se carimbos de data/hora em tempo real forem necessários, usar SYSDATE() é mais apropriado.
Além disso, como a função NOW() depende da configuração de fuso horário, ela pode retornar resultados diferentes dependendo da configuração do sistema. Em aplicações globais, é essencial projetar com considerações de fuso horário em mente.


