CodeGym /Cursos /SQL SELF /Funções pra pegar a data e hora atual: NOW(), CURRENT_D...

Funções pra pegar a data e hora atual: NOW(), CURRENT_DATE, CURRENT_TIME

SQL SELF
Nível 31, Lição 1
Disponível

O PostgreSQL tem várias funções nativas pra trabalhar com valores de tempo atuais. Essas funções são úteis pra coisas tipo rastrear automaticamente quando um registro foi criado, montar relatórios baseados na data de hoje ou checar se um evento rolou num certo período. Bora ver três funções principais: NOW(), CURRENT_DATE e CURRENT_TIME.

NOW(): pegando a data e hora atual

A função NOW() retorna a data e hora atual no formato TIMESTAMP WITH TIME ZONE. Isso quer dizer que o resultado inclui o horário certinho levando em conta o fuso horário do servidor.

Exemplo:

SELECT NOW();
-- Resultado: 2025-05-25 14:30:45.761523+03

Repara que o resultado inclui:

  • a data (2025-05-25),
  • a hora (14:30:45.761523),
  • o fuso (+03).

Se você não quiser o fuso horário, pode converter o resultado pra TIMESTAMP:

SELECT NOW()::TIMESTAMP;
-- Resultado: 2025-05-25 14:30:45.761523

CURRENT_DATE: pegando só a data de hoje

A função CURRENT_DATE retorna só a data de hoje, sem hora. O tipo do valor retornado é DATE.

Exemplo:

SELECT CURRENT_DATE;
-- Resultado: 2025-05-25

Isso é útil quando você não precisa se preocupar com a hora, tipo pra calcular idade ou agrupar dados por dia.

CURRENT_TIME: pegando só a hora atual

A função CURRENT_TIME retorna a hora atual no formato TIME WITH TIME ZONE. Se não quiser o fuso, pode converter pra TIME.

Exemplo:

SELECT CURRENT_TIME;
-- Resultado: 14:30:45.761523+03

SELECT CURRENT_TIME::TIME;
-- Resultado: 14:30:45.761523

Exemplos de uso das funções

Bora ver uns exemplos práticos de como essas funções podem ser úteis.

Preenchendo automaticamente a hora de criação do registro

Quando a gente adiciona registros numa tabela, é massa salvar automaticamente a data e hora de criação. No PostgreSQL dá pra fazer isso usando DEFAULT NOW() na criação da tabela.

Exemplo de criação de tabela:

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW() -- momento de criação da linha
);

Adicionando um registro:

INSERT INTO orders (customer_name) VALUES ('Otto Lin');

Vamos ver o conteúdo da tabela:

SELECT * FROM orders;

Resultado:

id customer_name created_at
1 Otto Lin 2024-11-25 14:45:12.154678

Filtrando dados por data

Imagina que temos uma tabela de pedidos e queremos pegar todos os pedidos criados hoje. Vamos usar CURRENT_DATE pra filtrar:

SELECT *
FROM orders
WHERE created_at::DATE = CURRENT_DATE;

Aqui a gente usa created_at::DATE pra ignorar a hora e pegar só a data.

Diferenças entre NOW() e CURRENT_TIMESTAMP

Parece que NOW() e CURRENT_TIMESTAMP fazem a mesma coisa. E é isso mesmo. Só que NOW() veio de um padrão, e CURRENT_TIMESTAMP de outro.

NOW() — função do PostgreSQL

A função NOW() é uma função nativa do PostgreSQL que retorna um valor do tipo TIMESTAMP WITH TIME ZONE (timestamptz). É a hora do servidor no momento em que o SQL começa a rodar.

Exemplo:

SELECT NOW();

CURRENT_TIMESTAMP — padrão SQL

CURRENT_TIMESTAMP é uma expressão definida pelo padrão SQL, e também retorna TIMESTAMP WITH TIME ZONE no PostgreSQL. Basicamente, o PostgreSQL implementa CURRENT_TIMESTAMP chamando a mesma função que NOW().

Exemplo:

SELECT CURRENT_TIMESTAMP;

Comparando na prática

SELECT NOW(), CURRENT_TIMESTAMP;

Resultado:

now current_timestamp
2025-05-25 14:30:45+03 2025-05-25 14:30:45+03

Os dois valores são iguais porque são calculados no mesmo momento — no começo da query.

Usando funções de tempo em condições de filtro

Agora bora fazer uma query que pega registros criados nos últimos 7 dias. Pra isso, dá pra usar NOW() com operações aritméticas de data:

SELECT *
FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';

Do mesmo jeito, se quiser pegar pedidos do mês atual, pode usar DATE_TRUNC() pra cortar o começo do mês:

SELECT *
FROM orders
WHERE created_at >= DATE_TRUNC('month', NOW());

DATE_TRUNC() é uma função massa, vou falar mais dela em umas aulas pra frente :P

Dicas práticas

  • Usa NOW() ou CURRENT_TIMESTAMP se precisar da hora certinha com fuso horário.
  • Vai de CURRENT_DATE se só a data já resolve (tipo pra calcular idade ou analisar eventos de um dia).
  • CURRENT_TIME é mais pra relatórios ou interfaces onde importa mostrar quanto tempo foi gasto numa tarefa.

Na próxima aula a gente vai começar a extrair partes de datas e horas usando as funções EXTRACT() e AGE(). Com elas dá pra, por exemplo, descobrir a idade de uma pessoa ou trabalhar com dados por dia, mês ou ano.

2
Tarefa
SQL SELF, nível 31, lição 1
Bloqueado
Obtendo a data atual
Obtendo a data atual
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION