在 Postgres 中检索即将到来的生日
Retrieve upcoming birthdays in Postgres
我有一个用户 table 在 postgres 数据库中有一个 dob(出生日期)字段。
我想编写一个查询来检索接下来五个即将到来的生日。我认为需要考虑以下几点-
- 按出生日期排序无效,因为年份可能不同。
- 您希望结果按 date/month 排序,但从今天开始。因此,例如,昨天的日期将是最后一行。
- 理想情况下,我想在没有函数的情况下执行此操作。但这不是一个交易破坏者。
有人在 SO 上提出了类似的问题,但 most 甚至没有一个可以接受的答案。谢谢你。
您可以查看出生日期并与当前日期的出生日期进行比较:
SELECT doy
, extract(doy from dob) - extract(doy from current_date) as upcoming_bday
FROM users
WHERE extract(doy from dob) - extract(doy from current_date) >= 0
order by 2
limit 5
好吧,这被否决了很多。但无论如何我都会 post 我的回答。其中一个答案帮助我得出了最终解决方案,但由于某种原因该答案已被其所有者删除。
无论如何,这个查询工作得很好。它给出了接下来的 5 个即将到来的生日,以及日期。
SELECT id, name,
CASE
WHEN dob2 < current_date THEN dob2 + interval '1 year'
ELSE dob2
END
AS birthday
FROM people,
make_date(extract(year from current_date)::int, extract(month from dob)::int, extract(day from dob)::int) as dob2
WHERE is_active = true
ORDER BY birthday
LIMIT 5;
我有一个用户 table 在 postgres 数据库中有一个 dob(出生日期)字段。
我想编写一个查询来检索接下来五个即将到来的生日。我认为需要考虑以下几点-
- 按出生日期排序无效,因为年份可能不同。
- 您希望结果按 date/month 排序,但从今天开始。因此,例如,昨天的日期将是最后一行。
- 理想情况下,我想在没有函数的情况下执行此操作。但这不是一个交易破坏者。
有人在 SO 上提出了类似的问题,但 most 甚至没有一个可以接受的答案。谢谢你。
您可以查看出生日期并与当前日期的出生日期进行比较:
SELECT doy
, extract(doy from dob) - extract(doy from current_date) as upcoming_bday
FROM users
WHERE extract(doy from dob) - extract(doy from current_date) >= 0
order by 2
limit 5
好吧,这被否决了很多。但无论如何我都会 post 我的回答。其中一个答案帮助我得出了最终解决方案,但由于某种原因该答案已被其所有者删除。
无论如何,这个查询工作得很好。它给出了接下来的 5 个即将到来的生日,以及日期。
SELECT id, name,
CASE
WHEN dob2 < current_date THEN dob2 + interval '1 year'
ELSE dob2
END
AS birthday
FROM people,
make_date(extract(year from current_date)::int, extract(month from dob)::int, extract(day from dob)::int) as dob2
WHERE is_active = true
ORDER BY birthday
LIMIT 5;