Entrambe le soluzioni includono l'ultimo giorno del mese precedente e anche include tutto "oggi".
Per una date
colonna:
SELECT *
FROM tbl
WHERE my_date BETWEEN date_trunc('month', now())::date - 1
AND now()::date
Puoi sottrarre valori interi semplici da una date
(ma non da un timestamp
) per sottrarre giorni. Questo è il modo più semplice e veloce.
Per un timestamp
colonna:
SELECT *
FROM tbl
WHERE my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND my_timestamp < date_trunc('day' , now()) + interval '1 day'
Nota che utilizzo il <
operatore per la seconda condizione per ottenere risultati precisi (~ "prima di domani").
Non trasmetto a date
nella seconda domanda. Invece aggiungo un interval '1 day'
, per evitare di lanciare avanti e indietro.
Dai un'occhiata ai tipi e alle funzioni di data/ora nel manuale.