Gostaria de saber se alguém poderia ajudar com alguns Postgres. Eu tenho uma tabela que tem uma coluna chamada mydate
que é 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!
sql
postgresql
Joseph
fonte
fonte
Respostas:
Se você só se preocupam com a data e não o tempo, substituto
current_date
paranow()
fonte
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.current_date
vez denow()
Eu acho que isso vai resolver:
fonte
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.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, usarnow()::date
ouCURRENT_DATE
é necessário.Isso deve dar a você a data atual menos 1 ano:
fonte
Você também pode verificar usando a
age()
funçãoselect * 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
fonte
age()
é uma função somente PostgreSQL (05/10/2018)