我正在尝试从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之前)。任何想法如何解决这个问题?
答案 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'之间生日的人中选择*