Les deux solutions incluent le dernier jour du mois précédent et également inclure tout "aujourd'hui".
Pour une date colonne :
SELECT *
FROM tbl
WHERE my_date BETWEEN date_trunc('month', now())::date - 1
AND now()::date
Vous pouvez soustraire des valeurs entières simples d'une date (mais pas à partir d'un timestamp ) pour soustraire des jours. C'est le moyen le plus simple et le plus rapide.
Pour un timestamp colonne :
SELECT *
FROM tbl
WHERE my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND my_timestamp < date_trunc('day' , now()) + interval '1 day'
Notez que j'utilise le < opérateur pour la deuxième condition afin d'obtenir des résultats précis (~ "avant-demain").
Je ne diffuse pas à date dans la deuxième requête. Au lieu de cela, j'ajoute un interval '1 day' , pour éviter les allers-retours.
Jetez un œil aux types et fonctions de date/heure dans le manuel.