PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Filtern Sie nach Datumsbereich (gleicher Monat und Tag) über Jahre hinweg

Angenommen (mit Vertrauensvorschuss), dass Sie unabhängig vom Jahr Daten zwischen bestimmten Tagen des Jahres haben möchten (z. B. wenn Sie einen Stapel Geburtstagskarten oder ähnliches versenden), können Sie einen Test damit einrichten:

CREATE TABLE d (dt date);
COPY d FROM STDIN;
1840-02-28
1990-06-21
1991-02-15
1991-04-25
1992-05-30
1995-03-04
1995-04-10
2001-02-03
2010-04-06
\.

Und Sie können "Zeilenwertkonstruktoren" verwenden, um den gewünschten Bereich einfach auszuwählen:

SELECT * FROM d
  WHERE (EXTRACT(MONTH FROM dt), EXTRACT(DAY FROM dt))
           BETWEEN (2, 15) AND (6, 21);

Was ergibt:

     dt     
------------
 1840-02-28
 1990-06-21
 1991-02-15
 1991-04-25
 1992-05-30
 1995-03-04
 1995-04-10
 2010-04-06
(8 rows)