PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Filtrar por período (mesmo mês e dia) ao longo dos anos


Supondo (com um salto de fé) que você deseja datas entre determinados dias do ano, independentemente do ano (como se você estivesse enviando um lote de cartões de aniversário ou algo assim), você pode configurar um teste com isso:
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
\.

E você pode usar "construtores de valor de linha" para selecionar facilmente o intervalo desejado:
SELECT * FROM d
  WHERE (EXTRACT(MONTH FROM dt), EXTRACT(DAY FROM dt))
           BETWEEN (2, 15) AND (6, 21);

Que rende:
     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)