当前位置: 首页 > 知识库问答 >
问题:

如何计算下一个生日给定的出生日期?

晁开宇
2023-03-14

在Postgres数据库中给定此架构:

CREATE TABLE person (
    id serial PRIMARY KEY,
    name text,
    birth_date date,
);

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

例如,如果Bob的出生日期是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

然而,我想看看博士后是否能以更有效的方式做到这一点。

共有3个答案

濮景龙
2023-03-14

从person中选择出生日期\u日期间隔“1年”作为下一个\u生日;

郤旭东
2023-03-14
SELECT
    birth_date
    +
    cast(
        date_part('year', current_date)
        -
        date_part('year', birth_date)
        +
        CASE
            WHEN
                date_part('month', birth_date) <
                        date_part('month', current_date)
                OR (
                    date_part('month', birth_date) =
                            date_part('month', current_date)
                    AND
                    date_part('day', birth_date) <
                            date_part('day', current_date)
                )
            THEN 1
            ELSE 0
        END || ' year' as interval)
FROM person;
颛孙铭
2023-03-14
select birth_date,
       cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday
from person
where name = 'Bob'

表达式(摘录(年从年龄(birth_date))1)*间隔'1'年计算下一个生日的年龄(完整)年。当添加到出生日期,这给了下一个生日。

强制转换对于获取真实的日期是必要的,因为日期间隔返回时间戳(包括时间)。

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

您还可以使用以下内容获得即将到来的生日列表,例如接下来的30天:

select next_birthday,
       next_birthday - current_date as days_until_next
from (
  select birth_date,
         cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday
  from person
) as upcoming
where upcoming.next_birthday <= current_date + 30
order by next_birthday;
 类似资料:
  • 我试图在MySQL中找到下一个基于DOB的日期实例-例如,如果DOB是1975-12-20,我们今天运行它,那么下一个生日是2020-12-20。 同样,如果DOB为1975-12-19,则下一个生日为2020-12-19,但如果DOB为1975-12-21,则下一个生日为2019-12-21。 我可以在PHP中通过分解日期和替换年份来实现这一点,但我想尝试在MySQL中实现,因为它会更快地运行,

  • 问题内容: 给定YYYYMMDD格式的出生日期,如何计算以岁为单位的年龄?是否可以使用该功能? 我正在寻找比现在使用的解决方案更好的解决方案: 问题答案: 我会为了提高可读性: 免责声明: 这也存在精度问题,因此也不能完全信任。它可能会关闭几个小时,有时会关闭,也可能会在夏令时关闭(取决于时区)。 相反,如果精度非常重要,我建议为此使用库。另外,可能是最准确的,因为它不依赖于一天中的时间。

  • 问题内容: 我在sql中有一个用户表,他们每个都有生日。我想将他们的出生日期转换为他们的年龄(仅年),例如日期:年龄:14,并将更改为年龄: 在这里,我想显示用户的日期: 问题答案: 功能:, MySQL > = 5.0.0 功能:,

  • 问题内容: 如果我有两个日期,获取这两个日期之间的天数的最佳方法是什么? 问题答案: 如果你有两个日期对象,则可以减去它们,从而计算出一个对象。

  • 问题内容: 我在Spring 3.0项目中使用Joda time api计算日期。现在我有一个开始日期和结束日期,我想在这两个日期之间得到每天的周末,星期六或星期日。我该如何实现? 我看了这篇Joda的时间-两个日期之间的所有星期一。它提供了一些指导,但在如何排除两个日期方面仍然含糊。 问题答案: 我想你的问题是如何 在两个日期之间的周末,星期六或星期日除外的每一天获取。 解决方案 :

  • 根据一段代码,我在PyCharm中有这个输出 我编写代码,然后将csv文件中的列birthdate转换为datetime对象: 然后我编写一个函数来创建并返回出生日期的年龄 从代码中,我在PyCharm控制台中有这个输出 预期的输出是一个带有年龄的列,应该添加到数据帧中