从Postgres中提取小于mm-dd的所有年份的日期

时间:2012-08-15 05:13:41

标签: sql postgresql

我正在尝试从Postgres数据库中提取一些数据来实现生日提醒系统,但我在查询工作时遇到了一些麻烦。基本上,我想拉出生日字段在一个月内的所有记录。我尝试了以下查询:

SELECT *
ALL persons
WHERE EXTRACT(MONTH from birthday) >= 9
AND EXTRACT(DAY from birthday) >= 15
INTERSECT
SELECT *
ALL persons
WHERE EXTRACT(MONTH from birthday) <= 10
AND EXTRACT(DAY from birthday) <= 15

查询的第一部分(在INTERSECT之前)似乎按照我的意愿运行,但第二部分是在15日之前的任何月份中排除日期。例如,如果在9/20有一个生日,第一部分将包括它,但第二部分将排除它,因为它是在第15天之后(即使它仍然在10/15之前)。任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

这应该有效:

SELECT *
FROM persons
WHERE
    EXTRACT(MONTH FROM age(CURRENT_DATE, birthday)) = 11; -- less than one month the next birthday

编辑:错误修复

答案 1 :(得分:2)

此查询输出生日少于一个月的人:

select * from persons where EXTRACT(MONTH FROM age(birthday))=0

如果您想在之前和之后输出生日:

select * from persons where EXTRACT(MONTH FROM age(birthday)) in (0,11)

答案 2 :(得分:0)

怎么样? 从'2012-09-15'和'2012-10-15'之间生日的人中选择*