sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur bestämmer jag den sista dagen i föregående månad med PostgreSQL?

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.



  1. Hur man använder ALL Logical Operator i SQL Server - SQL Server / TSQL Tutorial Del 126

  2. Hur man lösenordsskyddar en databas i Access 2016

  3. Kan du inte använda en LIKE-fråga i en JDBC PreparedStatement?

  4. PostgreSQL sammansatt primärnyckel