postgresql – 如何计算出生日期的下一个生日?

postgresql – 如何计算出生日期的下一个生日?,第1张

概述在Postgres数据库中给出此模式: CREATE TABLE person ( id serial PRIMARY KEY, name text, birth_date date,); 我如何在今天之后查询表格以获取每个人下一个生日的日期? 例如,如果Bob的birth_date是2000-06-01,那么他的下一个生日将是2016-06-01. 注意:我不是在寻找一 在Postgres数据库中给出此模式:
CREATE table person (    ID serial PRIMARY KEY,name text,birth_date date,);

我如何在今天之后查询表格以获取每个人下一个生日的日期?

例如,如果Bob的birth_date是2000-06-01,那么他的下一个生日将是2016-06-01.

注意:我不是在寻找一个预定间隔的birth_date,而是在一个人出生的下一个周年纪念日.

我在Python中编写了等价物:

def next_birthday(self):    today = datetime.date.today()    next_birthday = self.birth_date.replace(year=today.year)    if next_birthday < today:        next_birthday = next_birthday.replace(year=today.year + 1)    return next_birthday

但是我想看看Postgres能否以更高效的方式做到这一点.

select birth_date,cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthdayfrom personwhere name = 'Bob'

表达式(提取物(年龄(birth_date))1)*间隔“1”年计算(完整)年份下一个生日的年龄.将其添加到出生日期时,这将给下一个生日.

由于日期间隔返回时间戳(包括时间),因此需要使用强制转换才能获得真实的日期.

如果你删除where条件,你将获得所有“下一个”生日.

您还可以获取即将到来的生日列表,例如:接下来的30天使用这样的东西:

select next_birthday,next_birthday - current_date as days_until_nextfrom (  select birth_date,cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday  from person) as upcomingwhere upcoming.next_birthday <= current_date + 30order by next_birthday;
总结

以上是内存溢出为你收集整理的postgresql – 如何计算出生日期的下一个生日?全部内容,希望文章能够帮你解决postgresql – 如何计算出生日期的下一个生日?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存