PostgreSQL, verificando la fecha relativa a "hoy"

103

Me preguntaba si alguien podría ayudar con algunos Postgres. Tengo una tabla que tiene una columna llamada mydateque es un tipo de fecha de postgres. Quiero hacer algo como:

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

Nunca antes había usado Postgres y estoy seguro de que solo necesito saber el nombre de algunas funciones; con gusto buscaré la referencia yo mismo. ¿Alguien puede señalarme en la dirección correcta?

¡Gracias!

Joseph
fuente
2
Para que conste, la documentación está aquí ; se necesita un poco para acostumbrarse, pero es extremadamente completa.
Financia la demanda de Monica el

Respuestas:

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

Si sólo se preocupan por la fecha y no es el momento, el sustituto current_datedenow()

Paul Tomblin
fuente
¡Esto es perfecto! Gracias
JustGage
1
Tenga en cuenta que now()es una marca de tiempo, por lo que este rango también incluirá solo parte del día de hace exactamente un año y parte del día de hoy. Si quieres filtrar por días completos, now()::dateenvía el contenido como sugirió Alex Howansky.
tokenizer_fsj
1
@tokenizer_fsj de uso en current_datelugar denow()
Paul Tomblin
66

Creo que esto lo hará:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Alex Howansky
fuente
10
Tenga en cuenta que interval '1 year', a diferencia de esto, no respetará los años bisiestos. Puede que eso no sea una preocupación suya, pero si lo es, use mi respuesta.
Paul Tomblin
Esta debería ser la respuesta aceptada. now()devuelve una marca de tiempo, por lo que después de restar '1 day', terminas con una marca de tiempo que probablemente filtrará parte del día que estás interesado en consultar. La mayoría de la gente quiere filtrar en un solo día completo, por lo que es necesario usar now()::dateo CURRENT_DATE.
tokenizer_fsj
9

Esto debería darle la fecha actual menos 1 año:

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

También puede verificar usando la age()función

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

age() Devolveré un intervalo.

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

Ver documentación de postgresql

Doc
fuente
Me dijeron que age()es una función solo de PostgreSQL (2018-10-05)
loxaxs
Como id la pregunta @loxaxs
hd1