在 PostgreSQL 中检查闰年与否

Posted

技术标签:

【中文标题】在 PostgreSQL 中检查闰年与否【英文标题】:check leap year or not in PostgreSQL 【发布时间】:2020-09-20 05:41:24 【问题描述】:

如何在 PostgreSQL 中检查给定的年份是否是闰年?

我尝试了以下查询。但它显示错误消息。

select extract(year from hiredate)% 4 = 0 from emp

【问题讨论】:

错误信息是什么? extract()的结果转换为integerselect extract(year from hiredate) % 4 = 0 from emp; 【参考方案1】:

您必须将提取的年份转换为整数。

select extract(year from hiredate)::integer % 4 = 0 from emp

但是,闰年的公式不正确。它是每四年除每 100 除每 400。1900 年不是闰年,但 2000 年是。

create function is_leap_year(timestamp)
returns boolean as $$
declare y integer;
begin
  y := extract(year from $1);
  return (y % 4 = 0) and (y % 100 <> 0 or y % 400 = 0);
end
$$ language plpgsql;

或者,您可以查看当年 3 月 1 日之前的哪一天。这更安全,因为它将使用 Postgresql 的内部逻辑。

create function is_leap_year(timestamp)
returns boolean as $$
begin
  return date_part(
    'day',
    make_date(date_part('year', $1)::int, 3, 1) - '1 day'::interval
  ) = 29;
end
$$ language plpgsql;

【讨论】:

以上是关于在 PostgreSQL 中检查闰年与否的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中检查年份是不是是闰年[重复]

春季启动中的postgresql错误

Postgresql 用户管理

通知:中国PostgreSQL认证培训

postgreSQL

使用 sqlalchemy 连接到本地 postgresql