Resumo : neste tutorial você aprenderá como usar a NOW()
função MySQL para obter a data e hora atuais do servidor.
Introdução à função MySQL NOW()
A função MySQL NOW()
retorna a data e hora atuais no fuso horário configurado como uma string ou um número no formato 'YYYY-MM-DD HH:MM:DD'
ou 'YYYYMMDDHHMMSS.uuuuuu'
.
Aqui está a sintaxe da NOW()
função:
NOW()
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O tipo retornado da NOW()
função depende do contexto onde você a utiliza.
Por exemplo, na instrução a seguir, a NOW()
função retorna a data e hora atuais como uma string:
SELECT NOW();
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------------+
| NOW() |
+---------------------+
| 2023-12-30 21:10:54 |
+---------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
No entanto, no contexto numérico, a NOW()
função retorna a data e a hora atuais como um número, conforme mostrado no exemplo a seguir:
SELECT NOW() + 0;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----------------+
| NOW() + 0 |
+----------------+
| 20231230211120 |
+----------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Observe que a NOW()
função retorna a data e hora em que a instrução começou a ser executada. Por exemplo:
SELECT NOW(), SLEEP(5), NOW();
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------------+----------+---------------------+
| NOW() | SLEEP(5) | NOW() |
+---------------------+----------+---------------------+
| 2023-12-30 21:11:36 | 0 | 2023-12-30 21:11:36 |
+---------------------+----------+---------------------+
1 row in set (5.02 sec)
Linguagem de código: JavaScript ( javascript )
Na consulta, a primeira NOW()
função foi executada, a SLEEP(5)
função pausou a execução da consulta por 5 segundos e a segunda função NOW() foi executada.
Porém, ambas NOW()
as funções retornam o mesmo valor, mesmo quando são executadas em momentos diferentes.
Se você deseja obter o horário exato em que a instrução é executada, use a SYSDATE()
função. Por exemplo:
SELECT SYSDATE(), SLEEP(5), SYSDATE();
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------------+----------+---------------------+
| SYSDATE() | SLEEP(5) | SYSDATE() |
+---------------------+----------+---------------------+
| 2023-12-30 21:11:59 | 0 | 2023-12-30 21:12:04 |
+---------------------+----------+---------------------+
1 row in set (5.01 sec)
Linguagem de código: JavaScript ( javascript )
Se você deseja alterar o fuso horário do servidor MySQL para ajustar a data e hora atuais retornadas pela NOW()
função, use a seguinte instrução:
SET time_zone = your_time_zone;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Cálculos da função MySQL NOW()
Como a NOW()
função retorna um número quando é usada em um contexto numérico, você pode usá-la em cálculos, por exemplo, agora mais 1 hora, agora menos 1 hora e agora mais 1 dia.
A instrução a seguir retorna a data e hora atuais, agora menos 1 hora e agora mais 1 hora:
-- mysql now minus 1 hour
SELECT
(NOW() - INTERVAL 1 HOUR) 'NOW - 1 hour',
NOW(),
-- mysql now plus 1 hour
NOW() + INTERVAL 1 HOUR 'NOW + 1 hour';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------------+---------------------+---------------------+
| NOW - 1 hour | NOW() | NOW + 1 hour |
+---------------------+---------------------+---------------------+
| 2023-12-30 20:12:23 | 2023-12-30 21:12:23 | 2023-12-30 22:12:23 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
A instrução a seguir retorna a data e hora atuais, agora menos 1 dia e agora mais 1 dia:
SELECT (NOW() - INTERVAL 1 DAY) 'NOW - 1 day',
NOW(),
(NOW() + INTERVAL 1 DAY) 'NOW + 1 day';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+---------------------+---------------------+---------------------+
| NOW - 1 day | NOW() | NOW + 1 day |
+---------------------+---------------------+---------------------+
| 2023-12-29 21:12:37 | 2023-12-30 21:12:37 | 2023-12-31 21:12:37 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Usando a função NOW() como valor padrão para uma coluna
Você pode usar a NOW()
função para fornecer um valor padrão para uma coluna DATETIME
ou TIMESTAMP
.
Quando você omite o valor de data ou hora na INSERT
instrução, o MySQL insere automaticamente a data e hora atuais na coluna cujo valor padrão é NOW()
. Por exemplo:
Primeiro, crie uma nova tabela chamada contacts
:
CREATE TABLE contacts(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at DATETIME NOT NULL DEFAULT NOW(),
updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A contacts
tabela inclui as seguintes colunas:
id
: esta é a coluna de chave primária da tabela de contatos.name
: representa o nome do contato.email
: esta coluna armazena o email do contato.created_on
: esta coluna possui o valor padrão especificado pelaNOW()
função.updated_at
: esta coluna é definidaupdated_at
com um valor padrão da data e hora atuais quando uma nova linha é inserida. Além disso, aON UPDATE NOW()
cláusula garante que a coluna seja atualizada automaticamente para a data atual e empata sempre que a linha for atualizada.
Observe que CURRENT_TIMESTAMP
e CURRENT_TIMESTAMP()
são sinônimos para NOW()
que você possa usá-los de forma intercambiável.
Segundo, insira uma nova linha na contacts
tabela:
INSERT INTO contacts(name, email)
VALUES('Jane Doe', '[email protected]');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, recupere os dados da contacts
tabela:
SELECT * FROM contacts;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----+----------+----------------------+---------------------+---------------------+
| id | name | email | created_at | updated_at |
+----+----------+----------------------+---------------------+---------------------+
| 1 | Jane Doe | [email protected] | 2023-12-30 21:36:09 | 2023-12-30 21:36:09 |
+----+----------+----------------------+---------------------+---------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Na INSERT
instrução, não fornecemos os valores das colunas created_at
e updated_at
. Portanto, eles usam o valor padrão que é a data e hora atuais retornadas pela função NOW().
Quarto, atualize a linha com id 1:
UPDATE contacts
SET name = 'Jane Smith'
WHERE id = 1;
Linguagem de código: JavaScript ( javascript )
Na instrução UPDATE, não especificamos o valor da coluna updated_at, portanto ela é atualizada no momento em que a linha é atualizada.
Por fim, recupere os dados da tabela de contatos:
SELECT * FROM contacts
WHERE id = 1;
Saída:
+----+------------+----------------------+---------------------+---------------------+
| id | name | email | created_at | updated_at |
+----+------------+----------------------+---------------------+---------------------+
| 1 | Jane Smith | [email protected] | 2023-12-30 21:36:09 | 2023-12-30 21:37:21 |
+----+------------+----------------------+---------------------+---------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Resumo
- Use a
NOW()
função para obter a data e hora atuais do servidor. - Use
DEFAULT NOW()
para uma coluna para definir o valor padrão da coluna para a data e hora atuais quando uma linha é inserida. - Use
ON UPDATE NOW()
para uma coluna para definir um padrão para uma coluna para a data e hora atuais quando uma linha é atualizada.