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!


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


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

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

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


Me dijeron que age()es una función solo de PostgreSQL (2018-10-05)
loxaxs

Como id la pregunta @loxaxs
hd1
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.