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!


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()


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;

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';

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


Disseram que age()é uma função somente PostgreSQL (05/10/2018)
loxaxs

Como id a pergunta @loxaxs
HD1
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.