Função NOW() do MySQL Explicada: Sintaxe, Exemplos e Diferenças em relação ao SYSDATE()

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.