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.