PostgreSQL, verificando a data relativa a “hoje”

103

Gostaria de saber se alguém poderia ajudar com alguns Postgres. Eu tenho uma tabela que tem uma coluna chamada mydateque é um tipo de data postgres. Eu quero fazer algo como:

SELECT * FROM MyTable WHERE mydate > [Today-1year]

Nunca usei o Postgres antes e tenho certeza que só preciso saber o nome de algumas funções - ficarei feliz em procurar a referência sozinho. Alguém pode me apontar na direção certa?

Obrigado!

Joseph
fonte
2
Só para constar, a documentação está aqui - leva um pouco de tempo para se acostumar, mas é extremamente abrangente.
Ação judicial de Monica de

Respostas:

174
select * from mytable where mydate > now() - interval '1 year';

Se você só se preocupam com a data e não o tempo, substituto current_dateparanow()

Paul Tomblin
fonte
Isto é perfeito! Obrigado
JustGage
1
Observe que now()é um carimbo de data / hora, portanto, esse intervalo também incluirá apenas parte do dia de exatamente um ano atrás e parte do dia hoje. Se você quiser filtrar em dias inteiros, transmitanow()::date inteiros como Alex Howansky sugeriu.
tokenizer_fsj
1
@tokenizer_fsj de uso em current_datevez denow()
Paul Tomblin
66

Eu acho que isso vai resolver:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Alex Howansky
fonte
10
Observe que interval '1 year', ao contrário , isso não respeitará os anos bissextos. Isso pode não ser uma preocupação sua, mas se for, use minha resposta.
Paul Tomblin
Esta deve ser a resposta aceita. now()retorna um carimbo de data / hora, portanto, após a subtração '1 day', você obtém um carimbo de data / hora que provavelmente filtrará parte do dia que você está interessado em consultar. A maioria das pessoas deseja filtrar em um único dia inteiro e, portanto, usar now()::dateou CURRENT_DATEé necessário.
tokenizer_fsj
9

Isso deve dar a você a data atual menos 1 ano:

select now() - interval '1 year';
coderaj
fonte
5

Você também pode verificar usando a age()função

select * from mytable where age( mydate, now() ) > '1 year';

age() retornará um intervalo.

Por exemplo age( '2015-09-22', now() )irá retornar-1 years -7 days -10:56:18.274131

Veja a documentação do postgresql

Doc
fonte
Disseram que age()é uma função somente PostgreSQL (05/10/2018)
loxaxs
Como id a pergunta @loxaxs
HD1