Problema:
Você gostaria de exibir a data de ontem (sem hora) em um banco de dados PostgreSQL.
Solução 1:
SELECT current_date - INTEGER '1' AS yesterday_date;
Supondo que hoje seja 24/09/2020, o resultado é:
ontem_date |
---|
23-09-2020 |
Discussão:
Para obter a data de ontem, você precisa subtrair um dia da data de hoje. Use
current_date
para obter a data de hoje. Observe que você não precisa de colchetes no final do current_date
função. No PostgreSQL, você pode subtrair ou adicionar qualquer número de dias usando o INTEGER
palavra-chave. Aqui, como você precisa subtrair um dia, você usa - INTEGER '1'
para obter a data de ontem. Observe que o resultado deste cálculo ainda tem o tipo de coluna date
. Solução 2:
SELECT (current_date - INTERVAL '1 day')::date AS yesterday_date;
Supondo que hoje seja 24/09/2020, o resultado é:
ontem_date |
---|
23-09-2020 |
Discussão:
Obtenha a data de hoje usando
current_date
. Você precisa subtrair um intervalo de um dia da data atual. Para fazer isso, use o INTERVAL
palavra-chave, que cria qualquer intervalo de data/hora desejado (aqui, '1 day'
, que no PostgreSQL é o mesmo que 24 horas). Subtraindo INTERVAL '1 day'
a partir da data de hoje resultará em uma coluna formatada como timestamp, então você precisa convertê-la para date
. A maneira mais rápida de fazer isso no PostgreSQL é anexando ::date
para toda a expressão (lembre-se de colocar a expressão entre parênteses). Claro, você pode voltar em qualquer intervalo de tempo com a mesma facilidade. Aqui está um exemplo:
SELECT (current_date - INTERVAL '3 months 10 days')::date;
Um
INTERVAL
também pode ser adicionado a uma data. Então, aqui está uma maneira se você quiser obter a data de amanhã:SELECT (current_date + INTERVAL '1 day')::date AS tomorrow_date;