Como listar registros com data dos últimos 10 dias?


101
SELECT Table.date FROM Table WHERE date > current_date - 10;

Isso funciona no PostgreSQL?

Respostas:


190

Sim, isso funciona no PostgreSQL (assumindo que a coluna " data " seja do tipo de dados date). Por que você simplesmente não tenta?

O formato ANSI SQL padrão seria:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

Eu prefiro esse formato porque torna as coisas mais fáceis de ler (mas é o mesmo que current_date - 10).


1
A consulta deve ser: SELECT Table.date FROM Table WHERE data> current_date - intervalo '10 dias ';
user2694306

4
@ user2694306: interval '10 day'é a sintaxe do Postgres. interval '10' dayé a sintaxe baseada no padrão SQL e também suportada pelo Postgres
a_horse_with_no_name

1
o intervalo deve ser 9 . 10 na verdade dá a você 11 dias de volta a partir de hoje.
David He

1
@DavidHe: isso faz a mesma coisa que a resposta original. Que usa 10, não9
a_horse_with_no_name

3
Apenas uma nota: no Redshift, a formulação do @ user2694306 funciona: intervalo '10 dias '. o intervalo '10' dia não funciona no Redshift.
Ben


9

Meu entendimento de meus testes (e do PostgreSQL dox ) é que as cotações precisam ser feitas de forma diferente das outras respostas e também devem incluir "dia" como este:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

Demonstrado aqui (você deve ser capaz de executar isso em qualquer banco de dados Postgres):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

Resultado:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

Na verdade, não percebi que a resposta de Bradley estava certa. De qualquer forma, deixarei o meu aqui como prova de que é o caminho correto. A resposta aceita está errada (pelo menos para a versão do Postgre que estou executando)
Altamente Irregular

0

Gostaria de verificar os tipos de dados.

current_date tem o tipo de dados "data", 10 é um número e Table.date - você precisa olhar sua tabela.


0

você também pode usar entre:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

O betweentem que estar com o valor mais baixo primeiro, então isso seria feito corretamente como SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
digite
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.