Båda lösningarna inkluderar den sista dagen i föregående månad och även inkludera hela "idag".
För ett date
kolumn:
SELECT *
FROM tbl
WHERE my_date BETWEEN date_trunc('month', now())::date - 1
AND now()::date
Du kan subtrahera vanliga heltalsvärden från ett date
(men inte från en timestamp
) för att subtrahera dagar. Detta är det enklaste och snabbaste sättet.
För en timestamp
kolumn:
SELECT *
FROM tbl
WHERE my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND my_timestamp < date_trunc('day' , now()) + interval '1 day'
Observera att jag använder <
operatör för det andra villkoret för att få exakta resultat (~ "före imorgon").
Jag castar inte till date
i den andra frågan. Istället lägger jag till ett interval '1 day'
, för att undvika att kasta fram och tillbaka.
Ta en titt på datum/tidstyper och funktioner i manualen.