2

誕生日リマインダー システムを実装するために Postgres データベースからデータを取得しようとしていますが、クエリを実行するのに少し問題があります。基本的に、生年月日フィールドが特定の 1 か月の範囲内にあるすべてのレコードをプルしたいと考えています。次のクエリを試しました。

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) は希望どおりに機能しているようですが、2 番目の部分では15 日より前の月の日付が除外されています。たとえば、9/20 に誕生日があった場合、最初の部分にはそれが含まれますが、2 番目の部分では 15 日目以降であるため除外されます (10/15 より前であっても)。これを修正する方法はありますか?

4

3 に答える 3

2

このクエリは、誕生日まで1か月未満の人を出力します。

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

前月と後の誕生日を出力する場合:

select * from persons where EXTRACT(MONTH FROM age(birthday)) in (0,11)
于 2012-08-15T06:58:11.720 に答える
2

これはうまくいくはずです:

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

編集:バグ修正

于 2012-08-15T05:32:11.987 に答える
0

誕生日が '2012-09-15' から '2012-10-15' の間にある人から * を選択するとどうなりますか?

于 2012-08-15T17:25:24.867 に答える